[Haskell-beginners] pattern matching to data inside a list

Michael Mossey mpm at alumni.caltech.edu
Fri Mar 27 09:25:43 EDT 2009


Is there a way to pattern match to a list argument and get a list? For 
example, I have this:

-- A LayoutItem has a center position (point), and the four ints are
-- "left width", "rigth width", "top height", and "bottom height"
data LayoutItem = LayoutItem Point Int Int Int Int
                 deriving Show

-- This computes the left width of a group of composited LayoutItem.
compositeLeftWidth :: [LayoutItem] -> Int
compositeLeftWidth items = let
     itemsPosX = [ x | LayoutItem (Point (x,_)) _ _ _ _ <- items ]
     itemsLW = [ lw | LayoutItem _ lw _ _ _ <- items ]
     z = zipWith (\x y -> x-y+1) itemsPosX itemsLW
     in (minimum z) - 1

What I'm wondering is if I could somehow do something like

compositeLeftWidth [ LayoutItem Point( x, _ ) lw _ _ _ ] = ...

and that x and lw would each be the lists I'm calling itemsPosX and 
itemsLW above.

Thanks,
Mike

PS Let me repeat my request to find out how to install SOE "on the 
library path." I know I'm impatient about this, but it seems simple 
enough, and it's driving me crazy that I can only write software in the 
same directory where I've installed SOE.


More information about the Beginners mailing list