我正在使用GHC-8.0.1。此代码(需要singletons lib):
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ConstraintKinds #-}
module Bug where
import Data.Kind
import Data.Singletons
type family MkCtx (kx :: Type) (kc :: Type) (c :: kc) (x :: kx) :: Constraint
type instance MkCtx kx (kx ~> Constraint) c x = Apply c x
type instance MkCtx kx (kx -> Constraint) c x = c x
带有消息:
Conflicting family instance declarations:
forall kx (x :: kx) (c :: kx ~> Constraint).
MkCtx kx (kx ~> Constraint) c x = Apply c x
forall kx (x :: kx) (c :: kx -> Constraint).
MkCtx kx (kx -> Constraint) c x = c x
为什么GHC认为这些实例存在冲突? 我不知道它们是如何重叠的。