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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to