gpt4 book ai didi

haskell - 如何在 Haskell 中获取 '[String] 的类型级别值?

转载 作者:行者123 更新时间:2023-12-02 11:58:49 24 4
gpt4 key购买 nike

我可以通过以下方式获取类型级String的值:

> :set -XDataKinds
> import Data.Proxy
> import GHC.TypeLits
> symbolVal (Proxy :: Proxy "test")
"test"

如何获取 '[String] 的值,例如 Proxy::Proxy '["a", "b", "c"]?我希望能够迭代代码中的值。

最佳答案

可以通过创建另一个类型类来解决:

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeOperators #-}
import Data.Proxy
import GHC.TypeLits

class ManySymbolVal (xs :: [Symbol]) where
manySymbolVal :: proxy xs -> [String]

instance ManySymbolVal '[] where
manySymbolVal _ = []

instance (KnownSymbol a, ManySymbolVal as) => ManySymbolVal (a ': as) where
manySymbolVal _ =
symbolVal (Proxy :: Proxy a) : manySymbolVal (Proxy :: Proxy as)

myProxy :: Proxy '["hello","small","world"]
myProxy = Proxy

main :: IO ()
main = mapM_ putStrLn (manySymbolVal myProxy)

关于haskell - 如何在 Haskell 中获取 '[String] 的类型级别值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37364835/

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