小编og_*_*loc的帖子

模式匹配lambda的绑定?

在Haskell中,我经常做这样的事情:

f $ \x -> case x of
            A a1 a2 -> ...
            B b1 b2 -> ...
            C c1 c2 -> ...
Run Code Online (Sandbox Code Playgroud)

但我不想要x,我只想解构它.

在标准ML中,我可以这样做:

f (fn A(a1,a2) => ...
    | B(b1,b2) => ...
    | C(c1,c2) => ...)
Run Code Online (Sandbox Code Playgroud)

有没有办法在Haskell或任何GHC扩展中执行此操作?

haskell sml pattern-matching

11
推荐指数
1
解决办法
580
查看次数

函数作为类型类的实例?

{-# LANGUAGE LambdaCase #-}

我有一堆函数以各种方式编码失败.例如:

  • f :: A -> BoolFalse失败时返回
  • g :: B -> Maybe B'Nothing失败时返回
  • h :: C -> Either Error C'Left ...失败时返回

我想以与Maybemonad 相同的方式链接这些操作,因此链接函数需要知道每个函数在继续下一个函数之前是否失败.为此,我写了这堂课:

class Fail a where
  isFail :: a -> Bool
instance Fail () where
  isFail () = False
instance Fail Bool where -- a
  isFail = not
instance Fail (Maybe a) where -- b
  isFail = not . isJust
instance Fail (Either a b) where -- c …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

5
推荐指数
1
解决办法
122
查看次数

标签 统计

haskell ×2

pattern-matching ×1

sml ×1

typeclass ×1