Ultimamente ho giocato con Haskell, e in particolare con l'intero concetto di functors. Più mi ci immergo, più mi sono concesso gli a-ha, e certamente stuzzica un po 'i miei recettori della dopamina.Inferenza di tipo Haskell per i Funcitors
Il problema con cui sono bloccato è il seguente. Ecco il codice che funziona, solleva la funzione e quindi la applica prima al valore di I/O, quindi a una lista.
replicator1 =
fmap (replicate 3)
replicator2 =
fmap (replicate 3)
main = do
replicated <- replicator1 getLine
print (replicator2 replicated)
E 'molto forte la tentazione di scrivere in modo più conciso, vale a dire:
replicator =
fmap (replicate 3)
main = do
replicated <- replicator getLine
print (replicator replicated)
Una parte di me dice che è concettualmente giusto, dal momento che replicator
dovrebbe essere applyable sia per IO e per elencare le istanze, ma essendo un linguaggio fortemente tipizzato, Haskell non mi permette di farlo. Penso di capire praticamente perché sta succedendo questo.
La domanda è: c'è un modo per avvicinarmi alla seconda variante? O è bello vivere con il primo?
Grazie!
A lw a y s s u r il p r e d ì s u r u z io n e a t t t t a d e l t o p o l e l. – leftaroundabout