Haskell 将类型级别的可选自然数(可能是Nat)与值关联
该函数将类型级别的natural与Haskell 将类型级别的可选自然数(可能是Nat)与值关联,haskell,type-level-computation,Haskell,Type Level Computation,该函数将类型级别的natural与整数值关联。使用数据类型,类型应用程序语言扩展 {-#语言数据类型} {-#语言类型应用程序{-} 模块Derp在哪里 导入数据代理(代理(..) 导入GHC.TypeLits(natVal) foo::整数 foo=natVal(代理服务器@1337) 人们如何将一个'可能是Nat与一个值相关联?e、 g.a可能是整数 foo2 :: Maybe Integer foo2 = maybeNatVal (Proxy @(Just 1337)) 这就是单身包的
整数
值关联。使用数据类型
,类型应用程序
语言扩展
{-#语言数据类型}
{-#语言类型应用程序{-}
模块Derp在哪里
导入数据代理(代理(..)
导入GHC.TypeLits(natVal)
foo::整数
foo=natVal(代理服务器@1337)
人们如何将一个'可能是Nat
与一个值相关联?e、 g.a可能是整数
foo2 :: Maybe Integer
foo2 = maybeNatVal (Proxy @(Just 1337))
这就是单身包的作用。相关函数名为
降级
<代码>降级,专用于类型级别值(使用可见类型应用程序),等于相应的术语级别值
需要提及的一个区别是Nat
降级为Natural
{-#语言类型应用程序,数据类型}
导入数据。单例
导入Numeric.Natural(Natural)--base
也许是天然的
myexample=demote@('Just 1337)
我们通常用来将类型转换为值的东西是:类型类
class MaybeNatVal (v :: Maybe Nat) where
maybeNatVal :: Proxy v -> Maybe Integer
instance MaybeNatVal Nothing where
maybeNatVal _ = Nothing
instance KnownNat n => MaybeNatVal (Just n) where
maybeNatVal x = Just $ natVal $ unJust x
where unJust :: Proxy (Just n) -> Proxy (n :: Nat)
unJust _ = Proxy
在另一个答案中建议的库做同样的事情,除了typeclass是多态的,并且实例是由模板Haskell生成的