在Haskell中处理函数中的错误

在Haskell中处理函数中的错误,haskell,Haskell,我有一个sign函数,它可以返回一个错误 signe :: Int -> Char signe chiffre | chiffre >= 1 && chiffre <= 9 = '+' | chiffre == 0 = '0' | chiffre >= -9 && chiffre <= (-1) = '-' | otherwise = error "Erreur in the sign" 它给了我 +

我有一个
sign
函数,它可以返回一个错误

signe :: Int -> Char
signe chiffre
    | chiffre >= 1 && chiffre <= 9 = '+'
    | chiffre == 0 = '0'
    | chiffre >= -9 && chiffre <= (-1) = '-'
    | otherwise = error "Erreur in the sign"
它给了我

++0***异常:符号中有错误


我希望没有任何异常:
++0

在这种情况下,您可以而且应该使用
或者

signe chiffre 
   | chiffre >= 1 && chiffre <= 9 = Just '+'
   ....
   | otherwise = Nothing    -- parbleu!!

signes = mapMaybe signe
signe chiffre

|chiffre>=1&&chiffre更好的方法是实际使用
Maybe
类型,它允许您直接返回
Nothing
Just aValue
。您可以将函数重写为

signe :: Int -> Maybe Char
signe chiffre
    | chiffre >= 1 && chiffre <= 9 = Just '+'
    | chiffre == 0 = Just '0'
    | chiffre >= (-9) && chiffre <= (-1) = Just '-'
    | otherwise = Nothing
signe::Int->Maybe Char
奇弗尔先生

|chiffre>=1&&chiffre=(-9)&&chiffre这个问题似乎已经得到了Ingo的回答,但我想指出的是,由于您在原始问题中有一条错误消息,也许“要么”是一个更好的选择

signe :: Int -> Either String Char
signe chiffre
    | chiffre >= 1 && chiffre <= 9 = Right'+'
    | chiffre == 0 = Right '0'
    | chiffre >= -9 && chiffre <= (-1) = Right '-'
    | otherwise = Left "Erreur in the sign"
signe::Int->任一字符串字符
奇弗尔先生

|chiffre>=1&&chiffre=-9&&chiffre我想以“大家好”开始我的消息,但即使编辑它也没有考虑到…mapMaybes-->“不在范围内”。(我在我的工作表顶部添加了“import Data.List”),所以我只尝试了signes=map signe,但我得到了[只是“+”,…,什么都没有]它实际上只是
mappaybe
。谢谢你指出这一点,@AlexReinking,它实际上是
mappaybe
,它在数据中。也许。始终将其与末尾有s的catMaybes混为一谈。上面更正了。我看了一下文档,在回答之前,我也试着用mapMaybe以防万一。同样的问题。。。以下是我的函数:导入数据。列表签名chiffre | chiffre>=1&&chiffre=-9&&chiffre Ingo感谢它的工作!!谢谢大家:)!!Haskell的另一个问题是:是否可以创建一个简单的代码来知道列表是否在增加?也许是foldr或其他的东西,但让事情变得简单?
signe :: Int -> Maybe Char
signe chiffre
    | chiffre >= 1 && chiffre <= 9 = Just '+'
    | chiffre == 0 = Just '0'
    | chiffre >= (-9) && chiffre <= (-1) = Just '-'
    | otherwise = Nothing
signe :: Int -> Either String Char
signe chiffre
    | chiffre >= 1 && chiffre <= 9 = Right'+'
    | chiffre == 0 = Right '0'
    | chiffre >= -9 && chiffre <= (-1) = Right '-'
    | otherwise = Left "Erreur in the sign"
signes liste = [ x | Right x<-map signe liste ]