Haskell类型别名和模块重新导出

时间:2015-09-21 12:59:50

标签: haskell typeclass

我目前正在努力与Haskell的类型课程进行斗争。我使用语言扩展名{-# LANGUAGE ConstraintKinds #-}为类型类提供了一个类型别名。

包含类型类的模块看起来像这样:

module Foo.Bar.Class
( C (..)
) where

class C a where
  foo :: a

现在我想要隐藏类型类的内部定义并公开类型类的更受限制的接口:

{-# LANGUAGE ConstraintKinds #-}

module Foo.Bar where
( Class
) where

import qualified Foo.Bar.Class as C


type Class = C

cabal文件将Foo.Bar.Class添加到隐藏的模块列表中,并将Foo.Bar添加到公开的模块列表中。

但是当我尝试使用如此定义的类型类时,编译器开始抱怨foo不是类型类Class的(可见)函数。

我的实例看起来像这样:

data FooBar = Foo | Bar

instance Class (FooBar -> String) where
  foo Foo = "foo"
  foo Bar = "bar"

(..)Class导出到模块导出后面添加C.foo并不能帮助我看到foo。有人可以帮忙吗?

提前致谢!

0 个答案:

没有答案