如果Nothing
短于4个字符,我有以下haskell函数返回String
:
stringToMove :: String -> Maybe Move
stringToMove [] = Nothing
stringToMove [a] = Nothing
stringToMove [a, b] = Nothing
stringToMove [a, b, c] = Nothing
stringToMove (l1:n1:l2:n2:rest) = Just (stringToCoords l1 n1, stringToCoords l2 n2)
我可以在length string
上进行测试,但据我所知,这不是编写此内容的haskell方式,因为如果String
很长,则会对所有内容进行评估。
有没有一种优雅的方式来写这个而不必在每一行重复Nothing
?
答案 0 :(得分:9)
stringToMove :: String -> Maybe Move
stringToMove (l1:n1:l2:n2:rest) = Just (stringToCoords l1 n1, stringToCoords l2 n2)
stringToMove _ = Nothing
答案 1 :(得分:4)
我只是觉得自己很想,如果你有很多像这样的支票并想要返回Maybe
,你可以使用do
表示法:
stringToMove :: String -> Maybe Move
stringToMove s = do
l1:n1:l2:n2:_ <- return s
return (stringToCoords l1 n1, stringToCoords l2 n2)
您可以根据需要多次执行可用的绑定,如果其中任何一个失败,该函数将返回Nothing
。