当前位置: 代码迷 >> 综合 >> Haskell 语言的 Monad 降级、解包的困惑
  详细解决方案

Haskell 语言的 Monad 降级、解包的困惑

热度:42   发布时间:2023-12-12 16:21:21.0

早晨和儿子在微信聊起 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 数据解包的函数,用模式匹配不知道如何写,回头再研究研究。

  相关解决方案