私はアプリケーションファンクタについて学んでいます。応用的Maybe
ためsourceでは、pure
関数は次のようになります。拡大引数を指定し適用ファンクタ純粋なマッチングはラップされていません
instance Applicative Maybe where
pure = Just
...etc
、私はそれがどのように見えると思う:私はpure (Just 5)
を呼び出すとき
pure x = Just x
、それはJust 5
を返します。
Just (Just 5)
を返さないでください。 Listのための同様
、:
instance Applicative [] where
pure x = [x]
私はそれが[4,5,6]
を返しpure [4,5,6]
呼び出します。
pure [4,5,6]
は[[4,5,6]]
を返すように見えます。
ここで何が起こっているのか簡単に説明できますか?
待って、私はそれを得たと思います - はありませんコンテキストがないことから、pure [4,5,6]
は、それだけで一般的なケースを使用して、同じ値を返すだList
ためApplicative
を使用していません。これは正しいです?
「純粋な3」と「(純粋な:おそらくInt - >おそらくIntbe)$ Just 3」を試してください。私はそれが一般的なケースを使用していると思うし、[ghciがIOにデフォルトしようとする](https://downloads.haskell.org/~ghc/7.10.2/docs/html/users_guide/interactive-evaluation.html)、 ' pure(Just 5) 'は' IO(Maybe Int) 'として評価されます。 – Yosh
純粋な型は* '* ma - > m(ma)'ではありません - ''純粋なx 'の値 'x'がすでに' m'の内側にある場合、 'm'純粋なものは同じmとなるでしょう。 @Yoshが述べたように、GHCiプロンプトに 'pure .. 'と入力すると、デフォルトの' a - > IO a'がデフォルトになります。もしデフォルトでなければ、印刷しようとするとあいまいなタイプのエラーになります(例えば、 'pure()'が 'Applicative f => f()'のようなタイプのもの) – user2407038