【发布时间】:2011-08-20 13:15:28
【问题描述】:
所以我在玩定义 TrieSet 数据类型(尽管我知道 I don't need to):
module Temp where
import Data.Map
data TrieSet a = Nonterminal (Data.Map a (TrieSet a)) | Terminal (Data.Map a (TrieSet a))
insert :: Ord a => [a] -> TrieSet a -> TrieSet a
insert [] (_ m) = Terminal m
insert (a:as) (c m) = c $ insertWith (insert as . flip const) a (insert as $ Nonterminal empty) m
当我遇到以前从未见过的错误时:
% ghc -c Temp.hs
Temp.hs:8:11: Parse error in pattern
所以看起来 GHC 不喜欢用相同的模式匹配多个一元构造函数。 我做了另一项测试以确保这是问题所在:
module Temp2 where
extract :: Either String String -> String
extract (_ s) = s
这似乎证实了我的怀疑:
% ghc -c Temp2.hs
Temp2.hs:4:9: Parse error in pattern
所以我的问题是(分多个部分):
- 我对 GHC 不喜欢这些功能的原因是否正确?
- 为什么这不是 Haskell 标准的一部分?毕竟,我们可以匹配多个具有相同模式的 nullary 构造函数。
- 我可以为 GHC 提供 LANGUAGE pragma 以使其接受这些吗?
【问题讨论】:
标签: haskell constructor pattern-matching ghc