And*_*tin 6 haskell ghc type-level-computation
该模块GHC.TypeLits目前提供natVal和symbolVal,这使我们能够获得从类型的一种运行时值Nat或Symbol.有没有办法让类型的运行时值[String]出型样的'[Symbol]?我看不出一个明显的方法来做到这一点.我可以想到一个使用类型类的东西OverlappingInstances,但似乎GHC应该已经有了这个功能.
symbolVal可以映射到类型级别列表.为此,我们需要ScopedTypeVariables并且PolyKinds除了DataKinds和之外TypeOperators.
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE PolyKinds #-}
import Data.Proxy
import GHC.TypeLits
我们将定义我们可以"获得类型的运行时值"的类型(任何类型)[String].
class SymbolVals a where
    symbolVals :: proxy a -> [String]
我们可以获得任何类型的空列表的字符串列表.
instance SymbolVals '[] where
    symbolVals _ = []
我们可以获得任何类型列表的字符串列表,其中我们可以获得第一种类型的字符串和余数的字符串列表.
instance (KnownSymbol h, SymbolVals t) => SymbolVals (h ': t) where
    symbolVals _ = symbolVal (Proxy :: Proxy h) : symbolVals (Proxy :: Proxy t)
| 归档时间: | 
 | 
| 查看次数: | 530 次 | 
| 最近记录: |