Come so, il ->
ha tipo *->*->*
, e il ((->) r)
ha tipo *->*
.Il tipo letterale in Haskell
Supponendo che esista un tipo (a->b->c)
, esiste un modo per rappresentare lo (a->b->)
?
Ho provato ((->) a ((->) b))
ma è un errore.
ho provato:
type Kab a b c = (a -> b -> c) -- it is ok
Ma è riuscito a utilizzare il Kab
in dichiarazione di istanza:
instance KClass (Kab a b) where -- error
L'unico modo che ho trovato che funziona è dichiarare un data
:
data Kab a b c = Kab (a -> b -> c)
instance KClass (Kab a b) where ..
Ma se uso i dati, devo scartare lo Kab
, mentre la mia idea è di implementare un KClass sul tipo di funzione nativa.
Quindi come si fa?
* Così il comitato di Haskell ha deciso di saltarlo. * Potresti aggiungere qualche riferimento per questo? – Jubobs
@Jubobs Non sono sicuro di cosa vogliate vedere qui. Non ci sono lambda di livello tipo nel Rapporto; ma non è che ci sia una sezione specifica in cui non sono o qualcosa del genere. –
L'inferenza di tipo con lambdas di tipo è decidibile per il frammento di modello di Miller, che include tutte le cose che abbiamo con i costruttori di tipo Haskell correnti. Penso che sia meglio dire che non abbiamo type lambda in Haskell perché non ce n'è stato molto bisogno e la tipizzazione dipendente è stata uno spazio di progettazione sperimentale fino a poco tempo fa. –