を応用的に変換するために、純粋な機能を使用することができます。は、なぜ私は型定義以下のいる
data Hello a b = Hi a
| Sali b
deriving (Show, Eq)
をし、それがApplicative
のインスタンスではありませんが、私はまだApplicative
なぜに変換するpure
を使用することができますか?
*ExercisesTraversable Data.Monoid Control.Applicative> :t pure $ Hi 34
pure $ Hi 34 :: (Num a, Applicative f) => f (Hello a b)
*ExercisesTraversable Data.Monoid Control.Applicative> pure $ Hi 34
Hi 34
そして、私が試してみてください。
*ExercisesTraversable Data.Monoid Control.Applicative> (Sali (*2)) <*> (Sali 4)
<interactive>:23:1: error:
* Non type-variable argument
in the constraint: Applicative (Hello a)
(Use FlexibleContexts to permit this)
* When checking the inferred type
it :: forall b a. (Num b, Applicative (Hello a)) => Hello a b
それはApplicative
インスタンスではないので、明らかです。
私は前書き 'Prelude>を見ています:純粋な$ Hi 34 純粋な$ Hi 34 ::(Num a、Applicative f)=> f(Hello a b)'私は 'IO'型を見ることができません。どうして? –
'IO'はあなたがそれを評価しようとするとき、デフォルトとしてのみ使用されます。 – chepner