-------------------------------------------------------------------- -- | -- Module : Text.Regex.Applicative -- Copyright : (c) Roman Cheplyaka -- License : MIT -- -- Maintainer: Roman Cheplyaka <roma@ro-che.info> -- Stability : experimental -- -- To get started, see some examples on the wiki: -- <https://github.com/feuerbach/regex-applicative/wiki/Examples> -------------------------------------------------------------------- module Text.Regex.Applicative ( RE , sym , psym , msym , anySym , string , reFoldl , Greediness(..) , few , comap , withMatched , match , (=~) , replace , findFirstPrefix , findLongestPrefix , findShortestPrefix , findFirstInfix , findLongestInfix , findShortestInfix -- * Custom uncons function -- $uncons , findFirstPrefixWithUncons , findLongestPrefixWithUncons , findShortestPrefixWithUncons , module Control.Applicative ) where import Text.Regex.Applicative.Types import Text.Regex.Applicative.Interface import Control.Applicative {- $uncons The following functions take an argument that splits the input into the first symbol and the remaining input (if the input is non-empty). It is useful, for example, for feeding a @Text@ to a regex matcher: >>> findFirstPrefixWithUncons Text.uncons (many (sym 'a')) "aaa" Just ("aaa", "") For another example, feeding input symbols annotated with source positions into a matcher, preserving the positions in the remaining input so the location of a lexical error can be recovered: @ data AList a b = AList { annotation :: a, stripAnnotation :: Maybe (b, AList a b) } findLongestPrefixAnnotated :: RE s a -> AList b s -> Maybe (a, AList b s) fondLongestPrefixAnnotated = findLongestPrefixWithUncons stripAnnotation @ The use of the other functions taking an @uncons@ argument is exactly analogous. -}