haskell - 有什么方法可以自定义 GeneralizedNewtypeDeriving 实例的一种或两种方法?

标签 haskell typeclass newtype deriving

Haskell 的 GeneralizedNewtypeDeriving 机制很棒;对于那些没有看过的人,写一些类似的东西

newtype SkewOptT 𝔪 α = SkewOptT (StateT Bool 𝔪 α)
    deriving (Applicative, Functor, Monad, MonadTrans)

将自动生成实例,例如,
instance [overlap ok] Monad 𝔪 => Monad (SkewOptT 𝔪)

但是,对于我的一个类型类,我想自定义一些方法。有没有办法覆盖或禁用 GeneralizedNewtypeDeriving 对这些方法的作用? typeclass 编码一些基本的 DSL 指令,如 for (一个循环),parfor (并行循环),fcndef (添加一个新函数)等,并没有一种完美的方法可以将其拆分为多个类型类[然后自动派生一个,然后手动编写另一个]。

最佳答案

不,这是不可能的。 Default signatures (GHC 7.2 中的新功能)可能会帮助您在这里拆分类;由于您可以根据其他类型类定义方法的默认实现,因此您可能能够派生一些实例,并且只在另一个类的实例中填写要覆盖的方法。

其实除了ShowRead , newtype deriving 只是检查一些前提条件是否满足,然后直接重用字典(因为 newtypes 与底层类型具有相同的表示);见 the documentation了解更多详情。

关于haskell - 有什么方法可以自定义 GeneralizedNewtypeDeriving 实例的一种或两种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695722/

相关文章:

haskell - 你在 Haskell 中发现了更高级别的类型有什么用途?

haskell - 现代延续运算符到底是什么?

haskell - 在 Haskell 中为复合类型定义一个实例

haskell - 哪些编程语言有类似 Haskell 的 `newtype`

haskell - 无法创建 Num 的派生实例

scala - 函数式编程是否可以减少冯·诺依曼瓶颈?

regex - "=~"提高 "No instance for (RegexContext Regex [Char] [String])"

function - 这个函数或模式有名字吗?

coq - 具有多个字段的类型类与 Coq 中的单个字段/Compute 命令的意外行为

haskell - 将值映射到新类型中