gpt4 book ai didi

haskell - 是否有用于启用重载字 rune 字的 GHC 扩展?

转载 作者:行者123 更新时间:2023-12-04 16:57:24 25 4
gpt4 key购买 nike

我知道有一个 GHC 扩展,OverloadedStrings ,它允许 字符串文字 (由 " 分隔)变为多态,类似于数字文字的内置行为。

我的问题是:是否有允许 的 GHC 扩展单字 rune 字 (由 ' 分隔)以类似的方式变为多态?

最佳答案

从 GHC 8.8 开始,您可以使用 QuasiQuotes 扩展以获得相当远的距离。这是一个 quasiquote 的示例,它只接受一个 ascii 字符并将其转换为它的字节表示。

import Language.Haskell.TH
import Language.Haskell.TH.Quote
import Language.Haskell.TH.Syntax

import Data.Word (Word8)
import Data.Char (isAscii)

asciiByte :: QuasiQuoter
asciiByte = QuasiQuoter
{ quoteExp = \str -> case str of
[c] | isAscii c -> lift (fromIntegral (fromEnum c) :: Word8)
_ -> fail ("asciiByte: expects a single ascii character, got " ++ str)
, quotePat = \_ -> fail "asciiByte: only available for expressions"
, quoteType = \_ -> fail "asciiByte: only available for expressions"
, quoteDec = \_ -> fail "asciiByte: only available for expressions"
}

然后,您可以将其用作:
ghci> [asciiByte|a|]
97
ghci> [asciiByte|é|]

<interactive>:75:12: error:
• asciiByte: expects a single ascii character, got é
• In the quasi-quotation: [asciiByte|é|]
ghci> [asciiByte|abc|]

<interactive>:76:12: error:
• asciiByte: expects a single ascii character, got abc
• In the quasi-quotation: [asciiByte|abc|]

关于haskell - 是否有用于启用重载字 rune 字的 GHC 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58890798/

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