gpt4 book ai didi

Haskell/GHC : Matching multiple unary constructors with the same pattern

转载 作者:行者123 更新时间:2023-12-02 02:52:10 25 4
gpt4 key购买 nike

所以我正在尝试定义一个 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 标准的一部分?毕竟,我们可以匹配多个具有相同模式的空构造函数。
  • 有没有我可以给 GHC 的 LANGUAGE pragma 使其接受这些?
  • 最佳答案

  • 是的。从来不支持这种通配符。
  • 在我看来,如果您不知道匹配的数据构造函数,则推断函数的类型会困难得多。想想一个函数f (_ n) = n .它的类型应该是什么? Haskell 的类型系统无法描述类型构造函数的数量,所以像 f 这样的函数不可能存在。
  • 我不这么认为。
  • 关于Haskell/GHC : Matching multiple unary constructors with the same pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7131954/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com