4

本质上,我有一个使用 Maybe Int 来显示数独问题的函数。Sudoku 的解决方案仅包含 Int,显示网格的代码几乎相同,除了用于问题的 Maybe Int 和用于解决方案的 Int。

是否可以将 Int 值用于需要 Maybe Int 的函数,如果可以,如何?

编辑:只是可行,有没有办法将 Int 的列表转换为 Int 的列表?

4

3 回答 3

9

如果xs是 a[Int]而你想要 a [Maybe Int],请使用map Just xs.

于 2012-03-13T16:47:55.227 回答
4

只需使用“只是”。

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

main = foobar (Just 3)

要转换列表,您可以使用 map.

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

如果你Just在列表本身上做,你最终会得到Maybe [Int].

于 2012-03-13T16:47:19.110 回答
1

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

于 2012-03-13T20:59:18.227 回答