本质上,我有一个使用 Maybe Int 来显示数独问题的函数。Sudoku 的解决方案仅包含 Int,显示网格的代码几乎相同,除了用于问题的 Maybe Int 和用于解决方案的 Int。
是否可以将 Int 值用于需要 Maybe Int 的函数,如果可以,如何?
编辑:只是可行,有没有办法将 Int 的列表转换为 Int 的列表?
如果xs
是 a[Int]
而你想要 a [Maybe Int]
,请使用map Just xs
.
只需使用“只是”。
foobar :: Maybe Int -> IO ()
foobar x = print x
main = foobar (Just 3)
要转换列表,您可以使用 map.
maybeList :: [a] -> [Maybe a]
maybeList = map Just
如果你Just
在列表本身上做,你最终会得到Maybe [Int]
.
Prelude 中的sequence
功能与您需要的功能相反,但其中的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
。