有什么方法可以在不使用类型族的情况下定义类型级别的投影?
我这样做:
{-# LANGUAGE TypeFamilies #-}
type family Project t :: *
type instance Project [r] = r ,
但我真的只使用过它的一个实例。
有什么方法可以在不使用类型族的情况下定义类型级别的投影?
我这样做:
{-# LANGUAGE TypeFamilies #-}
type family Project t :: *
type instance Project [r] = r ,
但我真的只使用过它的一个实例。
我不确定你将在哪里使用它。但我倾向于只使用类型级别的投影来满足 haskell 类型系统。我通常做的是定义一个这样的函数:
project :: [a] -> a
project = undefined
现在在 type 的对象上使用 project[a]
会给我一个 type 的对象a
。
我与上述一起使用的另一个功能(尽管有时)是asTypeOf
.
您可以使用MultiParamTypeClass
and FunctionalDependencies
,但不知道为什么要使用它,很难说这是否足够。
class Project k a | k -> a
instance Project [r] r
> :t undefined :: Project String r => r
undefined :: Project String r => r :: Char