【发布时间】:2012-02-27 06:45:23
【问题描述】:
当我在一个值上使用fmap 时,它实质上是“取消装箱”该值,将函数应用于它,然后将其装箱。
例如:
-- returns Just 8
fmap (+3) (Just 5)
是否有任何函数可以在不将其装箱的情况下为我提供价值?
-- returns 8
fmap_2 (+3) (Just 5)
当然,我不知道这对数组有什么作用,但对于初学者来说,它对Eithers 和Maybes 很有用。我也可以用它轻松混合 Monad:
-- myfunc :: Maybe Int
-- if myfunc returned a Just, show it and then print it. Otherwise, print 'Nothing'.
putStrLn . fmap show $ myfunc
或者还有其他混合 Monad 的标准方法吗?
【问题讨论】:
-
不,没有混合单子的标准方法。不可能有。单子不通勤。但是,一些 monad 可以以它们自己的特殊方式混合。封装这种特殊的单子混合方式的既定方法称为单子转换器。那里有几个 monad 转换器库和大量文献。只需谷歌“monad 转换器”。
标签: haskell