myfunc ('t':'o':'a':'s':'t':'e':'r' : restOfString) = ...
Using a normal pattern match works, but gets bothersome as the prefix string gets longer.
{-# LANGUAGE PatternGuards #-}
import Data.List
myFunc string | Just restOfString <- stripPrefix "toaster" string =
-- do something special
myFunc string = -- do the default case here
Using a library function instead of a pattern match is a bit easier to read and write.
{-# LANGUAGE ViewPatterns #-}
import Data.List
myFunc (stripPrefix "toaster" -> Just restOfString) = -- do something special
myFunc string = -- do the default case here
A GHC 6.10 syntax extension makes this usage even more natural.
Of course, the latter two are completely equivalent, and we can make do (messily) without any sugar at all.
import Data.List
myFunc string =
if restIsJust
then -- do something special
else -- do the default case here
where
(restIsJust, restOfString) =
case stripPrefix "toaster" string of
Just something -> (True, something)
Nothing -> (False, undefined)
Those syntax extensions are meant to make life easier for us, though.