bit*_*ask 9 haskell cross-platform compiler-errors ghc hugs
这样的模式:
front :: [a] -> a
front (x:_) = x
front _ = error "Empty list"
Run Code Online (Sandbox Code Playgroud)
似乎在Haskell中很常见,但我特别记得在我开始学习Haskell时学习以下内容:
dec :: (Integral a) => a -> a
dec (x+1) = x
dec _ = error "Bottom"
Run Code Online (Sandbox Code Playgroud)
但是,ghc似乎拒绝了那段代码,说明:
Parse error in pattern: x + 1
虽然hugs接受它就好了.那么,这是否是有效的Haskell以及为什么这些编译器的行为不同.
在haskell 98中,这是合法的,但它在haskell 2010中被禁止,这是最近版本的GHC实现的.另一方面,拥抱多年来没有更新,并实现了haskell 98.
n + k模式是不受欢迎的,因为可能存在匹配的数字,n+1但是没有n适合的数字n+1.
考虑浮点数:存在一个适合的数字n+1(4294967296 :: Float是4294967295的n + 1,但是这个数字不适合浮点数 - 比较,round (4294967296 :: Float)并且round (4294967295 :: Float)都得到4294967296).
你也可能有反弹+(haskell支持运算符重载)所以模式匹配意味着什么?为了避免这种模糊,不允许使用n + k个模式.
如果你想要使用n + k模式,你可以在源文件的顶部使用语言编译指示:
{-# LANGUAGE NPlusKPatterns #-}
Run Code Online (Sandbox Code Playgroud)
PS:我相信这一切都始于这个电子邮件主题.
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |