Ainsi, dans Idris c'est parfaitement valable pour écrire la suite.
item : (b : Bool) -> if b then Nat else List Nat
item True = 42
item False = [1,2,3] // cf. https://www.youtube.com/watch?v=AWeT_G04a0A
Sans la signature d'un type, cela ressemble à un typées dynamiquement de la langue. Mais, en effet, l'Idris est dépendante de typage. Le type concret de l' item b
peut seulement être déterminé au cours de l'exécution.
C'est, bien sûr, un Haskell-programmeur de parler: - Le type d' item b
dans l'Idris sens est donné lors de la compilation, c'est - if b then Nat ...
.
Maintenant, ma question: Suis-je en droit de conclure qu'en Haskell, la frontière entre l'exécution et la compile-time fonctionne exactement entre le monde des valeurs (False, "foo", 3) et le monde de types (Bool, String, Integer) alors que dans l'Idris, la frontière entre l'exécution et la compile-time va à travers les univers?
Aussi, suis-je en droit de supposer que, même avec des types dépendants en Haskell (à l'aide de DataKinds et TypeFamilies, cf. cet article) l'exemple ci-dessus est impossible en Haskell, parce que Haskell contrairement à Idris ne permettent pas de valeurs de fuite au niveau du type?