28 Dec 12:31
Re: what does @ mean?.....
ChrisK <haskell <at> list.mightyreason.com>
2007-12-28 11:31:50 GMT
2007-12-28 11:31:50 GMT
Nicholls, Mark wrote: > Hello, I wonder if someone could answer the following… > > The short question is what does @ mean in > > > > mulNat a b > > | a <= b = mulNat' a b b > > | otherwise = mulNat' b a a > > where > > mulNat' x@(S a) y orig > > | x == one = y > > | otherwise = mulNat' a (addNat orig y) orig > The @ means an as-pattern as defined in the Haskell 98 report section 3.17.1 http://www.haskell.org/onlinereport/exps.html#3.17.1 The 'x' binds to the whole (S a) and the 'a' binds to the parameter of the constructor 's'. There is a possible performance benefit here. Consider: zeroNothing Nothing = Nothing zeroNothing (Just n) = if n == 0 then Nothing else (Just n) versus zeroNothing Nothing = Nothing zeroNothing x@(Just n) = if n == 0 then Nothing else x The first example takes apart the (Just n) and later reconstructs (Just n). Unless the compiler is fairly clever, this will cause the new (Just n) to be a new allocation instead of reusing the input value. The second form uses an at-pattern to bind 'x' to the whole input parameter and the returned 'x' will not need to be reallocaed. -- -- Chris
RSS Feed