gpt4 book ai didi

regex - 了解 Text.Regex.Posix 设计选择

转载 作者:行者123 更新时间:2023-12-01 05:01:28 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





"=~" raise "No instance for (RegexContext Regex [Char] [String])"

(4 个回答)


6年前关闭。




我玩了一下 Text.Regex.Posix ,我发现了这个奇怪的设计选择。

这是我的 GHCi session :

λ> "Needle, Haystack, foo, and bar." =~ "[^ ]+" :: String
"Needle,"
λ> "Needle, Haystack, foo, and bar." =~ "[^ ]+" :: [[String]]
[["Needle,"],["Haystack,"],["foo,"],["and"],["bar."]]
λ> "Needle, Haystack, foo, and bar." =~ "[^ ]+" :: [String]

<interactive>:27:35:
No instance for (RegexContext Regex [Char] [String])
arising from a use of ‘=~’
In the expression:
"Needle, Haystack, foo, and bar." =~ "[^ ]+" :: [String]
In an equation for ‘it’:
it = "Needle, Haystack, foo, and bar." =~ "[^ ]+" :: [String]

我惊讶地发现,在 RegexContext 的实例中,没有 RegexLike a b => RegexContext a b [b] 的实例, 但仅限 RegexLike a b => RegexContext a b [[b]] .

我不明白为什么使用这种设计。为什么没有 [String] 的实例如上所述,为什么它只是 [[String]] ?

最佳答案

该实例确实存在于 Text.Regex.Base.Context回到 regex-base-0.83 (2007 年 3 月 5 日上传),但在 regex-base-0.90 中被删除(2007 年 3 月 13 日上传)。没有变更日志或解释(此时的模块文档有一个 XXX THIS HADDOCK DOCUMENTATION IS OUT OF DATE XXX 注释,直到当前版本才保留。)

然而,我对为什么这样做的最佳猜测是 String[Char] 的类型同义词, 以便拥有两个 String 的实例和 [b]会导致重叠的实例问题 - 我认为不是直接的,但足以使类型推断工作不佳,特别是如果您使用 OverloadedStrings (虽然我不知道那个扩展当时是否已经存在)。

关于regex - 了解 Text.Regex.Posix 设计选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288060/

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