代码之家  ›  专栏  ›  技术社区  ›  vkubicki

如何在Haskell中对中间值进行模式匹配

  •  0
  • vkubicki  · 技术社区  · 6 年前

    问题

    在书里 程序员范畴理论 作者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 (然后返回 无效的 ). 我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Dan Robertson    6 年前

    你可以用 case 要进行模式匹配:

    f >=> g = \x ->
      case f x of
        Valid v -> g v
        Invalid -> Invalid
    
    推荐文章