53得票2回答
Haskell中的"data ... where"是什么意思?

我在omegagb的开发日志上看到了这段代码片段:data ExecutionAST result where Return :: result -> ExecutionAST result Bind :: (ExecutionAST oldres) -> (oldres ...

51得票1回答
类似GADT类型变量的角色的未来是什么?

昨天的一个问题(链接)中提到了HList(来自HList包)的定义,其中使用了数据家族。基本上:data family HList (l :: [*]) data instance HList '[] = HNil newtype instance HList (x ': xs) = HCon...

44得票5回答
GADT的实际应用场景是什么?

我该如何使用广义代数数据类型(GADT)? Haskell WikiBook中给出的示例太简单了,无法给我展示 GADT 的真正可能性。

30得票2回答
为什么GADT/存在类型数据构造函数不能在惰性模式中使用?

今天在尝试使用延迟模式匹配existential GADT构造函数时,我遇到了一个编译器错误: 存在类型或GADT数据构造函数不能在惰性(~)模式内使用 为什么有这个限制?如果允许使用会发生什么“糟糕”的事情?

21得票1回答
奇怪的 GHC 错误信息,"我的大脑刚刚爆炸了"?

当我尝试在使用Netwire和Vinyl的proc语法中模式匹配GADT时:sceneRoot = proc inputs -> do let (Identity camera :& Identity children) = inputs ...

20得票1回答
OCaml中何时需要使用反驳案例?

在官方OCaml文档的“语言扩展”章节的GADTs部分中,介绍了形式为_ -> .的反驳案例。然而,我认为模式匹配已经是穷尽的,所以我不确定何时实际上需要反驳案例。 文档中给出的示例如下: type _ t = | Int : int t | Bool : bool t l...

20得票2回答
如何在GADT中恢复共享?

在Haskell中的类型安全可观察共享一文中,Andy Gill展示了如何在DSL中恢复存在于Haskell层面上的共享。他的解决方案已经在data-reify包中实现。这种方法能否修改以适用于GADTs?例如,给定以下GADT: data Ast e where IntLit :: I...

17得票1回答
如何在Haskell中允许GADTs?

今天我从 haskell.org 和 https://wiki.haskell.org 开始学习GADTs。 不幸的是,我不知道如何使用它们。如果我运行示例代码,则会出现以下错误:[1 of 1] Compiling Main ( test.hs, interprete...

16得票2回答
为Haskell GADTs定义Eq实例

我有一个类似于这样的GADT: data In a where M :: MVar a -> In a T :: TVar a -> In a F :: (a -> b) -> In a -> In b 它包装了各种输入原语,但最后一个构造函数还...

16得票1回答
GADTs的类型参数擦除后如何实现相等性

我无法为使用GADTs实现的以下类型安全DSL的表达式实现Eq实例。 data Expr a where Num :: Int -> Expr Int Bool :: Bool -> Expr Bool Plus :: Expr Int -> Expr Int ...