可能除以解析错误(Haskell)

时间:2013-03-31 00:30:01

标签: haskell pattern-matching maybe

这是一个我无法解决的简单问题 我试图通过以下代码获得maybe_divide作为所需的分配,但终端给我一个错误消息

  

test2.hs:1:112:模式中的解析错误:(只是x)

maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = case maybeX maybeY of
  (Just x) (Just y)
    |x/=0 && y/=0 -> Just (div x y)
    |x=0 && y/=0  -> Just 0
    |x/=0 && y=0  -> Nothing
  Nothing (Just y) -> Nothing
  (Just x) Nothing -> Nothing

谁愿意告诉我它有什么问题? 感谢

1 个答案:

答案 0 :(得分:4)

maybeX maybeY在参数maybeX上应用函数maybeY,而您打算对(maybeX,maybeY)对进行大小写分析。您还应该使用==表示相等,而不是=。以下将按您的意图执行:

maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = case (maybeX,maybeY) of
  (Just x,Just y)
    |x/=0 && y/=0 -> Just (div x y)
    |x==0 && y/=0  -> Just 0
    |x/=0 && y==0  -> Nothing
  (Nothing,Just y) -> Nothing
  (Just x,Nothing) -> Nothing

或者,您可以使用Maybe monad,如

maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = do
        x <- maybeX
        y <- maybeY
        case (x,y) of
                (0,y) -> Just 0
                (x,0) -> Nothing
                (x,y) -> Just (div x y)