Вопрос

По сути, у меня есть функция, которая использует Maybe Int для отображения задачи судоку.Решение судоку содержит только целые числа, а код для отображения сетки будет практически идентичен, за исключением Maybe Int, используемого для задач, и Int, используемого для решений.

Можно ли использовать значения Int для функции, требующей Maybe Int, и если да, то как?

Редактировать:Просто сработает, есть ли способ преобразовать список Int в, возможно, Int?

Это было полезно?

Решение

Если xs это [Int] и ты хочешь [Maybe Int] вместо этого используйте map Just xs.

Другие советы

Просто используйте «Просто».

foobar :: Maybe Int -> IO ()
foobar x = print x

main = foobar (Just 3)

Чтобы преобразовать список, вы можете просто использовать карту.

maybeList :: [a] -> [Maybe a]
maybeList = map Just

Если ты это сделаешь Just в самом списке вы получите Maybe [Int].

А sequence функция в Prelude делает прямо противоположное тому, что вам нужно, но sequence версия в Traversable работает для вас:

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]

Конечно map Just в вашем случае проще, но моя версия удобна, если у вас есть список внутри Just.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top