gpt4 book ai didi

haskell - 将类型级别列表转换为值

转载 作者:行者123 更新时间:2023-12-04 14:11:56 24 4
gpt4 key购买 nike

模块 GHC.TypeLits 目前提供 natValsymbolVal ,它允许我们从一种类型 Nat 中获取运行时值或 Symbol .有没有办法获得 [String] 类型的运行时值?出类拔萃'[Symbol] ?我看不到一个明显的方法来做到这一点。我能想到一个使用带有 OverlappingInstances 的类型类的方法。 ,但似乎 GHC 应该已经有这个功能了。

最佳答案

symbolVal 可以映射到类型级别列表。为此,我们需要 ScopedTypeVariablesPolyKinds除了DataKindsTypeOperators .

{-# 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)

关于haskell - 将类型级别列表转换为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666431/

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