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如果我完全不让这个案例关闭,我会得到同样的错误信息.
我希望它能够显示我的错误信息.希望有人能发现我的问题.谢谢!
基本的Haskell语法怪异.这是语言中唯一的情况.
suffix -5是suffix - 5的(-) suffix 5.该-字符被视为中缀二进制运算符,就像haskell中所有标点符号命名的函数一样.也就是说,除非前面的表达式中没有字符-.做你想做的最简单的方法是suffix (-5).通过将其包含在parens中,您在语法上将其设置为独立表达式,这意味着表达式中不会出现任何字符-.
但是,这会产生自己的奇怪之处,因为您无法创建用于从输入中减去值的运算符部分. 与该语言中的任何其他二元运算符不同(-5),它不是意味着的部分\x -> x - 5.这是一种不幸的情况,一元否定和二元减法使用相同的符号,因为这意味着在Haskell的语法中必须存在这样的极端情况.