Functional programming DPair在鳍上变位

Functional programming DPair在鳍上变位,functional-programming,idris,Functional Programming,Idris,我正在学习Idris教程,希望进行实验 与相关的对和鳍 以下代码未键入签入Idris data Fin : Nat -> Type where FZ : Fin (S k) FS : Fin k -> Fin (S k) P : (Fin 1) -> Type P FZ = Char vec : DPair (Fin 1) P vec = MkDPair FZ 'c' 错误如下所示 prims.idr:9:15: When checking ri

我正在学习Idris教程,希望进行实验 与相关的对和鳍

以下代码未键入签入Idris

data Fin : Nat -> Type where
    FZ : Fin (S k)
    FS : Fin k -> Fin (S k)

P : (Fin 1) -> Type 
P FZ = Char 

vec : DPair (Fin 1)  P 
vec = MkDPair FZ 'c' 
错误如下所示

prims.idr:9:15:
When checking right hand side of vec with expected type
        DPair (Fin 1) P

When checking argument pf to constructor Builtins.MkDPair:
    Type mismatch between
            Char (Type of 'c')
    and
            P FZ (Expected type)
我已经检查过p FZ是Char,所以我对类型不匹配的投诉感到困惑。使用Nat而不是Fin 1编译相应的代码
完美地我做错了什么?

p FZ
没有被标准化为
Char
,因为编译器没有看到
p
是总计(使用
%default total
获得警告)。这项工作:

data Fin : Nat -> Type where
    FZ : Fin (S k)
    FS : Fin k -> Fin (S k)

P : (Fin 1) -> Type 
P FZ = Char 
P (FS FZ) impossible
P (FS (FS _)) impossible

vec : DPair (Fin 1)  P 
vec = MkDPair FZ 'c'