Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I translated this into Haskell just for fun.

    match :: String -> String -> Bool
    match ('^':rest) text     = matchLocal rest text
    match rex        (c:rest) = matchLocal rex (c:rest) || match rex rest
    match _          _        = False
 
    matchLocal :: String -> String -> Bool
    matchLocal []            _         = True
    matchLocal "$"           []        = True
    matchLocal (c:'*':restR) (t:restT) = c == t && matchLocal restR (starSkip c (t:restT))
    matchLocal (r:restR)     (t:restT) = (r == '.' || r == t) && matchLocal restR restT
    matchLocal _             _         = False
 
    starSkip :: Char -> String -> String
    starSkip c (t:rest) = if c == t then starSkip c rest else t:rest
    starSkip _ []       = []



Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: