我对下面的cadr1
有以下错误,这是有道理的
无法演绎(BoolEq n('Succ('Succ n'0))〜'True)
来自上下文(BoolEq n('Succ('Succ n'))〜'True)
类型变量'n'0'是不明确的
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
module DecidablePropositionalEquality where
data Nat = Zero | Succ Nat
data Vec :: * -> Nat -> * where
VNil :: Vec a Zero
VCons :: a -> Vec a n -> Vec a (Succ n)
type family Greater (a:: Nat) (b:: Nat) :: Bool where
Greater Zero Zero = True
Greater Zero (Succ x) = False
Greater (Succ x) Zero = True
Greater (Succ a) (Succ b) = Greater a b
op :: forall a n n'. (Greater n (Succ (Succ n')) ~ True) => Vec a n -> a
op v = undefined
我没有在定义网站上使用n'
,所以它不明确。
对我来说,是否存在对此n'
的存在量化,以便ghc不会尝试将其分配给某种类型,并且因为没有任何东西与任何东西联系而失败?
更一般地说,如何控制那些类型变量的范围?
编辑:已修改为删除布尔类型系列