1

Learn You A Haskellのテキストでは、リストモナドは次のように定義されています。

instance Monad [] where
    return x = [x]
    xs >>= f = concat (map f xs)
    fail _   = []

bind オペレーターはリスト値をそのままの値に変換しconcat、リスト性のレイヤーをトリミングすることになっているため、この定義は一見すると理にかなっています。[a]しかし、map の output-typeが concat の input-type と一致しない場合、この定義はどのようにコンパイルできます[[a]]か?

4

1 に答える 1

3

mapタイプがあり(a -> b) -> [a] -> [b]ます。

fタイプがありa -> m bます。

List モナドでは、 の型fは: a -> [b],

それでmap f :: [a] -> [[b]]

于 2013-08-13T22:45:48.913 に答える