[Haskell-cafe] Re: Perl-ish =~ operator
ozone at algorithm.com.au
ozone at algorithm.com.au
Tue Feb 24 01:57:41 EST 2004
On 24/02/2004, at 1:30 AM, Andre Pang wrote:
> In my effort to turn Haskell into a language more like Perl
> (muahaha)[1], I got a bit fed up and implemented something like Perl
> 5's =~ binding operator (a.k.a. "regex" operator); I thought maybe
> somebody else here might find it useful. Perl has the concept of
> 'contexts': a function does something different depending on what type
> its caller expects back from the function. Sounds like a perfect
> abuse of type classes, to me :).
And, just for kicks, here's Perl 6's "smart match" (~~) operator, which
works much like ==, but in a more "Do What I Mean!" fashion, matching
any type to any other type:
---
{-# OPTIONS -fglasgow-exts -fallow-undecidable-instances
-fallow-overlapping-instances #-}
module SmartMatch where
import Text.Regex
class TruthValue a where
truth :: a -> Bool
instance TruthValue Bool where
truth = id
instance TruthValue Int where
truth 0 = False
truth _ = True
instance TruthValue String where
truth "" = False
truth _ = True
instance TruthValue a => TruthValue [a] where
truth = all truth
class SmartMatch a b where
(~~) :: a -> b -> Bool
instance Eq a => SmartMatch a a where
a ~~ b = a == b
instance SmartMatch c d => SmartMatch d c where
a ~~ b = b ~~ a
instance TruthValue a => SmartMatch Bool a where
a ~~ b = a == truth b
instance SmartMatch String Regex where
s ~~ re = case matchRegex re s of
Nothing -> False
Just x -> True
---
--
% Andre Pang : trust.in.love.to.save
More information about the Haskell-Cafe
mailing list