当我使用fmap
超过一个值时,它实质上“解开”该值,将该函数应用于该值并将其备份。Haskell中的泛型'unwrap'函数?
例如:
-- returns Just 8
fmap (+3) (Just 5)
是否有给我不拳击回来了价值的功能?
-- returns 8
fmap_2 (+3) (Just 5)
当然,我不知道如何做到这一点的阵列工作,但它会为Either
S和Maybe
S,对于初学者来说是有用的。我也可以用它来轻松地混合Monad:
-- myfunc :: Maybe Int
-- if myfunc returned a Just, show it and then print it. Otherwise, print 'Nothing'.
putStrLn . fmap show $ myfunc
或者是否有另一种混合Monads的标准方式?
不,没有混合单子的标准方式。不可能有。 Monad不通勤。 然而,* some * monads可以混合在他们自己的特殊方式。将这种特殊的monad混合方式封装起来的方法称为monad变压器。有几个单子变压器的图书馆和广泛的文献。只是谷歌“monad变压器”。 – 2012-02-27 07:24:32
看一看:[如何从monadic action中提取价值?](http://stackoverflow.com/questions/8567743/how-to-extract-value-from-monadic-action) – 2012-02-27 07:24:35