【发布时间】:2018-11-20 16:17:56
【问题描述】:
this page of the Haskell Wikibook 上有一个练习,可让您使用 Maybe 和 Either 完成一个场景(大概是为了表明用例非常痛苦)。
练习是:
data Expr = I Int
| B Bool -- boolean constants
| Add Expr Expr
| Mul Expr Expr
| Eq Expr Expr -- equality test
eval :: Expr -> Maybe (Either Int Bool)
-- Your implementation here.
解决方案的第一行是 - 我认为 - 直截了当:
data Expr = I Int -- integer constants
| B Bool -- boolean constants
| Add Expr Expr -- add two expressions
| Mul Expr Expr -- multiply two expressions
| Eq Expr Expr -- equality test
deriving (Show)
eval :: Expr -> Maybe (Either Int Bool)
eval (I n) = Just $ Left n
eval (B b) = Just $ Right b
eval (Add e1 e2) = ...
eval (Mul e1 e2) = ...
eval (Eq e1 e2) = ...
但我不确定如何定义其余部分。举个例子,我猜对于add,我需要解压缩每个表达式的fromLeft、fromJust,但我不确定如何正确执行此操作(使用模式匹配?)
提前致谢!
【问题讨论】:
标签: haskell