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

瑞兹蒙

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

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

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

安德鲁·塞德乌斯·马丁(Andrew Thaddeus Martin)

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

{-# 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章