1
我对Haskell相当新,并有一个关于模式匹配的问题。 下面是代码的重简化版本:模式匹配的情况下,Haskell
data Value = MyBool Bool | MyInt Integer
codeDuplicate1 :: Value -> Value -> IO Value
codeDuplicate1 = generalFunction True
codeDuplicate2 :: Value -> Value -> IO Value
codeDuplicate2 = generalFunction False
generalFunction :: Bool -> Value -> Value -> IO Value
generalFunction b x1 x2 = do result <- eval x1
case result of
MyBool b -> do putStrLn $ show b
return (MyBool b)
_ -> eval x2
eval :: Value -> IO Value
eval (MyInt x) | x > 10 = return (MyInt 10)
| x > 5 = return (MyBool True)
| otherwise = return (MyBool False)
现在,我意识到,在generalFunction参数b是不一样的情况下,部分B,因此,这段代码将印片B不管输入。我用相同的名字来表达我的意图。所以我的问题是:
有没有一种方法来匹配第一个B和第二个,所以如果BBS是相同的,它会打印,否则它会评估X2?而且,如果没有,是否有另一种好方法来获得预期结果?
我几乎在this question找到答案,但我认为这种情况稍有不同。
谢谢,这两个作品,看起来不错!我实际上已经尝试过了,因为伪代码中的另一个问题中提出了类似的问题,但我认为我必须把警卫放在错误的地方。 – Hjalmar 2011-03-01 01:56:24