题
本质上我有一个使用 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)
要转换列表,您可以只使用map。
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
.
不隶属于 StackOverflow