【问题标题】:Haskell Couldn't match expected type involving maybeHaskell 无法匹配可能涉及的预期类型
【发布时间】:2015-03-07 03:09:55
【问题描述】:

我目前正在学习 Haskell,我遇到了一个问题,但我真的不明白问题出在哪里。当我编译下面的代码时,它告诉我“无法将预期类型 'integer' 与实际类型 'Maybe Integer' 匹配”第 17:19 行和 17:27 再次出现相同的错误。

maybe_divide :: Maybe Integer -> Maybe Integer -> Maybe Integer
maybe_divide a b = case valid_div a b of
True  -> Just (a `div` b)
False -> Nothing

valid_div :: Maybe Integer -> Maybe Integer -> Bool
valid_div a b
    | a == Nothing = False
    | b == Nothing = False
    | b == Just 0  = False
    | otherwise = True

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: haskell


    【解决方案1】:

    maybe_divide中,ab的类型是Maybe Integer....不能除Maybe Integers

    a `div` b --won't work
    

    您必须先“解包”Maybe 值,提取Integers,然后才能在div 中使用它们。 (有几种方法可以做到这一点,包括模式匹配)。

    【讨论】:

    • 如果你不想手动解开可能的包装,liftA div a b 可能是要走的路。
    • 感谢您的解决方案,但我不确定@genisage 是什么意思...另外,您能详细说明提取Maybe Values 的简单方法吗?
    • @WhatDoor 您可能正在解开问题中的值。
    • @WhatDoor- 一个干净的解包方法是使用case 和模式匹配,或者只在函数定义级别使用模式匹配。一个不太干净的方法是使用fromJust(如果你不小心给了Nothing,它可能会崩溃)......
    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2020-09-05
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多