Concettualmente, pensavo ai tipi come insiemi. Tuttavia, penso di aver visto persone che desiderano distinguere i tipi A
, B
anche se rappresentano raccolte di valori identiche. Quindi ho capito che una migliore definizione di tipo è una coppia (type_name, set)
, in cui due tipi diversi non possono avere lo stesso primo elemento.
Poi mi sono imbattuto in una situazione diversa. Ho pensato che una funzione è solo un insieme di coppie (x, y)
. Ma poi una funzione A->B
(dove A, B
rappresenta le stesse raccolte di valori) non può essere distinta da una funzione B->B
o A->A
o B->A
, e ancora penso di aver visto persone che vogliono distinguerle . Quindi, come posso definire una funzione? Come una tupla (A, B, (x1, y1), (x2, y2), ...)
, dove ogni elemento di A
appare esattamente una volta come il primo elemento nelle coppie, e dove ogni secondo elemento è di tipo B
?
E il tipo F
che rappresenta tutte le funzioni che richiede A->B
è quindi (F, ((A, B, (a1, b11), (a2, b12), ...), (A, B, (a1, b21), (a2, b22), ...), (A, B, (a1, b31), (a2, b32), ...)))
, dove a1, ...
sono tutti i valori rappresentati da A e b?1, b?2, ...
, per qualsiasi ?
, sono alcuni di i valori rappresentati da B
.
Sembra tutto piuttosto ingombrante, mi manca qualcosa?