Если вы хотите сопоставить на основе строкового префикса, вы можете использовать расширение ViewPatterns .Это расширение можно включить, передав в компилятор -XViewPatterns, запустив :set -XViewPatterns
в ghci или поставив {-# LANGUAGE ViewPatterns #-}
вверху файла.
Затем вы можете написать функцию matchPrefix
(не на 100% оптимально, поскольку он повторяется по prefix
дважды):
matchPrefix :: String -> String -> Maybe String
matchPrefix prefix result
| and (zipWith (==) prefix result) = Just (drop (length prefix) result)
| otherwise = Nothing
А затем используйте его в схеме, подобной следующей:
startsWithInt :: String -> Bool
startsWithInt (matchPrefix "int " -> Just rest) = True
startsWithInt _ = False
Если вы хотитесопоставлять на основе списка токенов и извлекать оставшуюся часть строки, а также сопоставить токен, вы можете сделать это, изменив matchPrefix
, чтобы сделать это вместо этого.