如何在实例声明中使用类型同义词?

时间:2014-06-25 10:43:56

标签: haskell

我想为类约束创建同义词,如下面的(非常简化的)示例

{-# LANGUAGE ConstraintKinds #-}

type Foo = Functor

data MyFunctor a = MyFunctor

instance Foo MyFunctor where
  fmap _ _ = MyFunctor

但我得到fmap is not a (visible) method of class Foo

似乎我能够这样做,因为the GHC documentation说“...标准约束,元组同义词允许在实例上下文中使用这两种约束超”。我正在使用GHC 7.6。

1 个答案:

答案 0 :(得分:4)

GHC文档中的这些陈述不涵盖您的案例。使用Foo的实例上下文类似于:

 instance Foo a => Bar a

超类会是这样的:

 class Foo a => Bar a

即。您正在定义其他类或实例,Foo / Functor是其中一项要求。在这里,您实际上是在尝试定义Functor本身,您必须使用真实的类名。