【发布时间】:2015-01-14 15:01:16
【问题描述】:
在下面的代码中,我使用存在量化定义了数据类型 F。我希望 F 类型的值保存接受单个参数并产生例如 Int 作为结果的函数。该参数需要实现一个我称之为 C 的类型类,但现在留空。
这是我第一次尝试存在类型。我显然做错了什么,因为我似乎无法创建 F 类型的值。
{-# LANGUAGE ExistentialQuantification #-}
class C a where
data F = forall a. C a => F (a->Int)
makeF :: F
makeF = F $ const 1
如何解决这个编译错误?
No instance for (C a0) arising from a use of `F'
In the expression: F
In the expression: F $ const 1
In an equation for `makeF': makeF = F $ const 1
【问题讨论】:
-
我发现使用 GADT 更容易完成这类事情。你可以有存在量化和类约束,但语法要简洁得多。
-
感谢您的提示。我也应该阅读 GADT。