myfunc ('t':'o':'a':'s':'t':'e':'r' : restOfString) = ...
通常のパターンマッチを使用しても機能しますが、プレフィックス文字列が長くなると面倒になります。
{-# LANGUAGE PatternGuards #-}
import Data.List
myFunc string | Just restOfString <- stripPrefix "toaster" string =
-- do something special
myFunc string = -- do the default case here
パターンマッチの代わりにライブラリ関数を使用すると、読み取りと書き込みが少し簡単になります。
{-# LANGUAGE ViewPatterns #-}
import Data.List
myFunc (stripPrefix "toaster" -> Just restOfString) = -- do something special
myFunc string = -- do the default case here
GHC 6.10構文拡張により、この使用法はさらに自然になります。
もちろん、後者の2つは完全に同等であり、砂糖をまったく使用せずに(乱雑に)実行できます。
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)
ただし、これらの構文拡張は、私たちの生活を楽にすることを目的としています。