Haskell:测试列表长度< 4

时间:2017-03-23 22:34:40

标签: haskell

如果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

2 个答案:

答案 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