【发布时间】:2019-12-09 05:59:19
【问题描述】:
问题
在 Bartosz Milewski 的程序员类别理论一书中,第 4.3 章。
您必须编写一个 Kleisli 范畴,其中态射是偏函数。这是我没有编译的尝试:
data Optional a = Valid a | Invalid deriving (Show)
return :: a -> Optional a
return x = Valid x
(>=>) :: (a -> Optional b) -> (b -> Optional c) -> (a -> Optional c)
f (>=>) g = \x ->
let s = f x
in | s == Valid v = g v
| s == Invalid = Invalid
在>=> 运算符定义中,我想对中间值s 进行模式匹配以测试是Valid(然后调用f)还是Invalid(然后返回@ 987654327@)。我该怎么做?
【问题讨论】:
-
我认为首先你应该考虑使 Optional 类型成为 Monad 类型类的实例,然后 Kleisli 组合运算符将免费提供
f >=> g = \x -> f x >>= g。 -
我以后会尝试这个Redu,本书的重点是逐步学习如何应用类别理论。
标签: haskell