Haskell中的错误功能

ZAX*_*ZAX 0 error-handling haskell

我有一个功能,可以在haskell中成功编译.

它看起来像这样:

suffix :: Int -> String
suffix i 
   | i==0                 = "th"
   | i==1                 = "st"
   | i==2                 = "nd"
   | i==3                 = "rd"
   | i>=4 || i<=9         = "th"
   | i<0                  = error "Must be positive integer"     ----------NOT WORKING?
   | otherwise            = suffix(i `rem` 10)      
Run Code Online (Sandbox Code Playgroud)

它至少与i<0警卫的错误线无关.当我进入GHCI并在一个数字上添加" - "时:suffix -5如果我完全不让这个案例关闭,我会得到同样的错误信息.

我希望它能够显示我的错误信息.希望有人能发现我的问题.谢谢!

Car*_*arl 9

基本的Haskell语法怪异.这是语言中唯一的情况.

suffix -5suffix - 5(-) suffix 5.该-字符被视为中缀二进制运算符,就像haskell中所有标点符号命名的函数一样.也就是说,除非前面的表达式中没有字符-.做你想做的最简单的方法是suffix (-5).通过将其包含在parens中,您在语法上将其设置为独立表达式,这意味着表达式中不会出现任何字符-.

但是,这会产生自己的奇怪之处,因为您无法创建用于从输入中减去值的运算符部分. 与该语言中的任何其他二元运算符不同(-5),它不是意味着的部分\x -> x - 5.这是一种不幸的情况,一元否定和二元减法使用相同的符号,因为这意味着在Haskell的语法中必须存在这样的极端情况.