我可以通过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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句