Haskell类型级投影

时间:2013-08-28 09:40:14

标签: haskell type-level-computation

有没有办法在不使用类型族的情况下定义类型级别投影?

我是这样做的:

{-# LANGUAGE TypeFamilies #-}
type family Project t :: *
type instance Project [r] = r ,

但我真的只使用它的一个实例。

2 个答案:

答案 0 :(得分:1)

我不确定你准确使用它的位置。但我倾向于仅使用类型级别投影来满足haskell类型系统。我通常做的是定义一个这样的函数:

project :: [a] -> a
project = undefined

现在在[a]类型的对象上使用项目将为我提供类型为a的对象。

我使用的另一个功能(虽然有时候)和上面的asTypeOf

答案 1 :(得分:1)

您可以使用MultiParamTypeClassFunctionalDependencies,虽然不知道为什么要使用它但很难说这是否足够。

class Project k a | k -> a
instance Project [r] r

> :t undefined :: Project String r => r
undefined :: Project String r => r :: Char