Domanda
In sostanza ho una funzione che utilizza forse INT per visualizzare un problema sudoku.La soluzione al sudoku contiene solo gli interni e il codice per la visualizzazione della griglia sarà quasi identica, ad eccezione di forse Int utilizzati per problemi e int utilizzati per soluzioni.
È possibile utilizzare i valori int per una funzione che richiede forse int, in caso affermativo come?
Modifica: funzionerebbe solo, c'è un modo per convertire un elenco di int è in forse int's?
Soluzione
Se xs
è un [Int]
e si desidera invece un [Maybe Int]
, utilizzare map Just xs
.
Altri suggerimenti
Basta usare "Just".
foobar :: Maybe Int -> IO ()
foobar x = print x
main = foobar (Just 3)
.
Per convertire un elenco, è possibile utilizzare la mappa.
maybeList :: [a] -> [Maybe a]
maybeList = map Just
.
Se si esegue Just
sull'elenco stesso, finirai con Maybe [Int]
.
La funzione sequence
in Preludio fa esattamente il contrario da ciò di cui hai bisogno, ma la versione sequence
in Traversable
funziona per te:
import Data.Traversable as T
T.sequence $ Just [1..10]
--[Just 1,Just 2,Just 3,Just 4,Just 5,Just 6,Just 7,Just 8,Just 9,Just 10]
.
Naturalmente map Just
è più facile nel tuo caso, ma la mia versione è utile se hai una lista all'interno Just
.