2

有什么方法可以在不使用类型族的情况下定义类型级别的投影?

我这样做:

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

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

4

2 回答 2

1

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

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

现在在 type 的对象上使用 project[a]会给我一个 type 的对象a

我与上述一起使用的另一个功能(尽管有时)是asTypeOf.

于 2013-08-28T09:54:02.157 回答
1

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

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

> :t undefined :: Project String r => r
undefined :: Project String r => r :: Char
于 2013-08-29T00:27:12.587 回答