
John Meacham wrote:
On Fri, Jan 27, 2006 at 04:57:14AM -0500, Cale Gibbard wrote:
Or if we're going to allow @ as an infix operator, we could use (@ pat), reminiscent of section notation. (exp @) of course would make no sense, seeing as there's no representation for patterns as values.
oooh. I like that. what fixity do you think @ should have? perhaps even lower than $...
I like it too, but I discovered you can get pretty close with a type class: -------- class Match a b where (@@) :: a -> b -> Bool instance Match a b => Match (Maybe a) (Maybe b) where Just a @@ Just b = a @@ b Nothing @@ Nothing = True _ @@ _ = False instance Match a () where x @@ () = True -------- The trick is that () behaves like a wildcard. eg: *Main> Just undefined @@ Just () True *Main> Just Nothing @@ Just () True *Main> Just Nothing @@ Just (Just ()) False *Main> Just Nothing @@ Just Nothing <interactive>:1:13: Ambiguous type variables `a', `a1' in the constraint: `Match a a1' arising from use of `@@' at <interactive>:1:13-14 Probable fix: add a type signature that fixes these type variable(s) *Main> Just (Just undefined) @@ Just () True *Main> Just (Just undefined) @@ Just (Just ()) True Cheers, Simon