我们有来自NICTA课程的mapOptional :
mapOptional :: (a -> b) -> Optional a -> Optional b
mapOptional _ Empty = Empty
mapOptional f (Full a) = Full (f a)
Run Code Online (Sandbox Code Playgroud)
匹配时f
我们显然使用了传递的函数,那么Empty
呢?那怎么样Full
?
没有什么在Haskell,让你观察两者是否Empty
s为同一 Empty
或没有,没有什么实现必须在这方面的代码做担保.
也就是说,在GHC中,给定参数化类型的nullary构造函数在所有参数化中共享; 所以Empty
在整个程序中只有一个[]
,只有一个,依此类推.