gpt4 book ai didi

string - 如何在不使用 OverloadedStrings 的情况下对文本进行模式匹配?

转载 作者:行者123 更新时间:2023-12-03 14:39:14 24 4
gpt4 key购买 nike

这有效:

{-# LANGUAGE OverloadedStrings #-}
myFunc :: Text -> String
myFunc "" = "nothing"
myFunc other = "something!"

没有 OverloadedStrings然而,扩展名, ""String 类型所以它不会编译。使用像 myFunc (pack "") 这样的函数在模式中是不允许的。

Haskell Bytestrings: How to pattern match?包含一些应该可行的建议,但是在这种情况下,我想知道它与 OverloadedStrings 一起使用的事实是否有什么特别之处那将允许更好的方法?

最佳答案

最直接的翻译是用ViewPatterns

{-# LANGUAGE ViewPatterns #-}
import qualified Data.Text as Txt
myFunc (Txt.unpack->"") = "nothing"
myFunc _other = "something!"

最好的翻译,尽管对于您的实际用例可能过于具体,当然是
myFunc txt | Txt.null txt  = "nothing"
| otherwise = "something!"

你也可以发疯并组成一个模式同义词:
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
pattern T :: String -> Txt.Text
pattern T str <- (Txt.unpack -> str)
where T = Txt.pack

接着
myFunc (T"") = "nothing"
myFunc _other = "something"

可以说, OverloadedStrings是比 ViewPatterns 更合理的扩展,而且肯定比 PatternSynonyms .

关于string - 如何在不使用 OverloadedStrings 的情况下对文本进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39319706/

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