{-# LANGUAGE ViewPatterns #-} {-# LANGUAGE PatternSynonyms #-} module M where -- prefixed [] s = Just s -- prefixed (p:ps) (s:ss) | p == s = prefixed ps ss -- GHC BREAKS prefixed (p:ps) (s:ss) = prefixed ps ss -- GHC IS FINE -- prefixed _ _ = Nothing prefixed2 = uncurry prefixed pattern Secured x <- (prefixed2 -> Just x) secure (Secured ("https://", x)) = x ++ " is secured" secure _ = "insecure"