Je comprends que je peux promouvoir Bool
au niveau du genre comme si, où Bool
peut potentiellement être True
ou False
:type de données qui est promouvables au niveau du genre avec une seule valeur
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
type family TF t :: Bool
type instance TF Int = True
type instance TF Bool = False
Je voulais plutôt promouvoir ()
, qui bien sûr n'a qu'une valeur ()
. Mais cela ne semble pas fonctionner:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
type family TF t ::()
type instance TF Int =()
type instance TF Bool =()
Je suppose que je pourrais simplement utiliser Bool
et True
, mais est-il un seul type d'une valeur qui peut être promu au niveau de la nature?
Merci. Juste curieux, est-ce que "True" et "False" sont magiques ou est-ce que je peux définir '()' de même? – Clinton
@Clinton 'True' et' False' sont des synonymes de '' True'' et ''False', définis par l'extension' DataKinds' pour plus de commodité. C'est bon pour Bool mais quand le type et le constructeur ont le même nom il y a ambiguïté, donc le guillemet simple habituellement optionnel est nécessaire. – zakyggaps
Il y a même un cinquième '()' pour une confusion supplémentaire: la contrainte vide. – dfeuer