implementation module Regex import StdEnv import StdMaybe import code from "regex.o" :: Regex = { ptr :: Int // pointer to a pcre2_code object , str :: String // string representation } instance toRegex String where toRegex flags s # r = c_compile s flags | r == 0 = Nothing | otherwise = Just {ptr=r, str=s} where c_compile :: !String !Int -> Int c_compile reg flags = code { ccall cleanregex_pcre2_compile "SI:p" } instance fromRegex String where fromRegex {str} = str instance toString Regex where toString r = fromRegex r instance fromString (Maybe Regex) where fromString s = toRegex zero s instance zero Flags where zero = 0 match :: !Regex !String -> Maybe Int match {ptr} s # res = match` ptr s | res < 0 = Nothing | otherwise = Just res where match` :: !Int !String -> Int match` _ _ = code { ccall cleanregex_match "pS:I" }