Czytam o Idrisie i typach zależnych, np.
data Fin : Nat -> Type
FZ : Fin (S k)
FS : Fin k -> Fin (S k)
O ile rozumiem ideę, to taki konstrukt reprezentuje zbiór skończony. I teraz kilka wątpliwości:
-
Fin 2
zwraca typ, który ma 2 konstruktory: FZ oraz FS? -
Fin 2
dopuszcza dwie wartości: FZ oraz FS FZ. Z sygnatury FS wynika, że skoro FS FZ jest wartościąFin 2
, tzn. że FZ musi być typuFin 1
, a może nie musi? -
Jeśli rozważę
Fin 3
, to ten typ dopuszcza 3 wartości: FZ, FS FZ oraz FS FS FZ. Skoro FS FS FZ jestFin 3
, to FS FZ jestFin 2
, ale wówczas nie kłóci się to z tym, że ma być typuFin 3
? -
Jeśli sie nie kłóci, tzn. że takie np. FS FZ jest typu
Fin k
dla każdego k>1 i wówczas wartość może pasowac do wielu typów? Jeśli tak, to czy to powód ograniczonego type inference w Idrisie?