我目前正在努力与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
。有人可以帮忙吗?
提前致谢!