获取有关 GHC 中的 Kind 推理错误的信息

nic*_*las 0 haskell

Edward Kmett报告了种类推断中的一个错误,这对他的类别库来说非常烦人。

我不知道在 GHC 的某些更高版本中是否已经解决了这个问题。它似乎存在于 8.10.7 和 9.0.2 中。

{-# LANGUAGE PolyKinds #-}
class D a => C (f :: k) a
class C () a => D a
Run Code Online (Sandbox Code Playgroud)
data W f (a :: k) where
  MkW :: W Maybe Int -> W f a
Run Code Online (Sandbox Code Playgroud)

如何获取有关此问题的信息(例如:它是否会得到解决)?

chi*_*chi 5

这并没有回答所提出的问题(“错误何时会被修复?”),但我认为知道添加显式类型签名使得使用 GHC 8.10.5 和 GHC >= 9 进行编译可能会很有用(前提是某些扩展已启用)。

-- extensions for GHC 8.10.5
{-# LANGUAGE UndecidableInstances, ExplicitForAll,
    PolyKinds, UndecidableSuperClasses, 
    StandaloneKindSignatures, MultiParamTypeClasses,
    FlexibleContexts #-}

import Data.Kind

type D :: Type -> Constraint
type C :: forall k. k -> Type -> Constraint

class D a => C (f :: k) a
class C () a => D (a :: *)
Run Code Online (Sandbox Code Playgroud)