haskell - 如何将重叠编译指示应用于派生实例

标签 haskell types ghc overlapping-instances

Pragma OverlappingInstances 在 GHC 中已被弃用一段时间,并且 OVERLAPPING pragma 可以替代它。

instance {-# OVERLAPPING #- } ...

尽管这不是 Haskell 中定义类实例的唯一方法。 我无法通过派生来定义重叠实例并避免有关已弃用的 OverlappingInstances 的讨厌警告。

以下情况均无效:

  deriving {-# OVERLAPPING #-} (Lift)
  deriving ({-# OVERLAPPING #-} Lift)

最佳答案

对于此类实例以及需要专门实例上下文的实例,您需要使用 StandaloneDeriving

{-# language StandaloneDeriving, FlexibleInstances #-}

data T a = T

deriving instance {-# OVERLAPPING #-} Show (T Int)
instance {-# OVERLAPPABLE #-} Show (T a) where
  show ~T = "Tee-hee"

main = do
  print (T :: T Int)
  print (T :: T Char)

关于haskell - 如何将重叠编译指示应用于派生实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67303814/

相关文章:

ruby-on-rails - Rails 4 - "No Implicit Conversion of Fixnum into String"- 错误仅发生在生产中

optimization - 为什么 `logBase 10 x` 比 `log x/log 10` 慢,即使是专门的?

haskell - 使用 `a0' 引起的模糊类型变量 `it'

haskell - 使用 Stack 分析构建

haskell 美味.HUnit : how to run multiple tests with IO

c - 使用 FFI 的带有 size_t 的 printf

java - 在运行时从数据类型oracle中检测数据类型java

c - 数据类型冲突错误

haskell - 在 Haskell 分析时排除开销

haskell - 如何编写 attoparsec 的 takeWhile1 的更通用(但高效)版本?