Haskell 语言的 Monad 降级、解包的困惑
程序员文章站
2022-07-13 23:39:02
...
早晨和儿子在微信聊起 Monad,我觉得按照 Monad 的设计原则,[int] -> int 类型的函数应该是不允许。儿子说 m a -> a 是允许的,但是这已经超出 Monad 的定义范围了。我忽然想起有一个 unsafe 模块可能就是这么干的,儿子说情况比我想的复杂。我暂时无法理解这里面的语法,写了一段程序,发现果然可以实现降级。关于 Monad 还得再仔细想想。
下面这个函数 p 可以把 Just 包装去掉,直观感觉就是 Maybe 这个 Monad 是可以降级的。
p :: Maybe a -> a
p (Just x) = x
试验一下:
>>p $ Just 123
123
很完美。想进一步写一个把 IO 数据解包的函数,用模式匹配不知道如何写,回头再研究研究。