Si prega di sopportare me come sono molto nuovo alla programmazione funzionale e Haskell. Sto tentando di scrivere una funzione in Haskell che prende una lista di numeri interi, stampa la testa di detta lista e poi restituisce la coda della lista. La funzione deve essere di tipo [Intero] -> [Intero]. Per dare un po 'di contesto, sto scrivendo un interprete e questa funzione viene chiamata quando il suo rispettivo comando viene cercato in una lista associativa (la chiave è il comando, il valore è la funzione).Haskell: I/O e ritorno da una funzione
Ecco il codice che ho scritto:
dot (x:xs) = do print x
return xs
Il compilatore fornisce il seguente messaggio di errore:
forth.hs:12:1:
Couldn't match expected type `[a]' against inferred type `IO [a]'
Expected type: ([Char], [a] -> [a])
Inferred type: ([Char], [a] -> IO [a])
In the expression: (".", dot)
Ho il sospetto che la chiamata a stampare nella funzione di punti è ciò che sta causando la il tipo dedotto deve essere IO [a]. C'è un modo in cui posso ignorare il tipo di stampa di ritorno, in quanto tutto ciò che devo restituire è la coda della lista passata in punto.
Grazie in anticipo.
Il [ 'Debug.Trace'] (http: // www Il modulo .haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Debug-Trace.html) può essere utilizzato anche per stampare le cose. –