[Haskell-cafe] CPS versus Pattern Matching performance

Jonathan Cast jcast at ou.edu
Tue Jul 10 11:22:51 EDT 2007

On Tuesday 10 July 2007, Tony Morris wrote:
> Thanks Don,
> Is your explanation specific to maybe? Or does that apply to all functions?
> Suppose the following function for lists:
> f :: [a] -> b -> (a -> [a] -> b) -> b
> ...instead of pattern matching [] and (x:xs)

Of course.  GHC doesn't know anything about maybe; all it sees is:

1. One-liner:

maybe f x mb = case mb of { Just x' -> f x'; Nothing -> x }

2. Non-recursive

And it inlines like crazy.  If you had quite a large data type, the number of 
case alternatives /might/ put you over GHC's inlining threshold, but that 
(ridiculous) scenario is the only thing that'll keep the argument from 
generalizing to your use case.


Jonathan Cast

More information about the Haskell-Cafe mailing list