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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top