在OCaml中,我习惯于编写如下代码:
let combine o1 o2 = match o1, o2 with
| Valid, Invalid | Invalid, Valid -> Invalid
| _ -> ...
Run Code Online (Sandbox Code Playgroud)
我没有找到在Haskell中编写或模式的方法,我真的很想念它.有没有人有办法解决吗?
我刚读过这篇非常有趣的文章,关于Prompt Monad 的另一种实现:http://joeysmandatory.blogspot.com/2012/06/explaining-prompt-monad-with-simpler.html
这是一个可以运行的简化代码:
data Request a where
GetLine :: Request String
PutStrLn :: String -> Request ()
data Prompt p r
= forall a. Ask (p a) (a -> Prompt p r)
| Answer r
instance Monad (Prompt p) where
return = Answer
Ask req cont >>= k = Ask req (\ans -> cont ans >>= k)
Answer x >>= k = k x
prompt :: p a -> Prompt p a
prompt req = …Run Code Online (Sandbox Code Playgroud)