有没有办法在不使用类型族的情况下定义类型级别投影?
我是这样做的:
{-# LANGUAGE TypeFamilies #-}
type family Project t :: *
type instance Project [r] = r ,
但我真的只使用它的一个实例。
答案 0 :(得分:1)
我不确定你准确使用它的位置。但我倾向于仅使用类型级别投影来满足haskell类型系统。我通常做的是定义一个这样的函数:
project :: [a] -> a
project = undefined
现在在[a]
类型的对象上使用项目将为我提供类型为a
的对象。
我使用的另一个功能(虽然有时候)和上面的asTypeOf
。
答案 1 :(得分:1)
您可以使用MultiParamTypeClass
和FunctionalDependencies
,虽然不知道为什么要使用它但很难说这是否足够。
class Project k a | k -> a
instance Project [r] r
> :t undefined :: Project String r => r
undefined :: Project String r => r :: Char