[Haskell-cafe] trivial function application question
Donald Bruce Stewart
dons at cse.unsw.edu.au
Fri Jan 5 21:03:10 EST 2007
tphyahoo:
>
> So the core question (speaking as a perler) is how do you write
>
> my $s= 'abcdefg';
> $s =~ s/a/z/g;
> $s =~ s/b/y/g;
> print "$s\n";
Simple patterns like this you'd just use a 'map' of course:
main = print (clean "abcdefg")
clean = map (by . az)
where by c = if c == 'b' then 'y' else c
az c = if c == 'a' then 'z' else c
Running this:
$ runhaskell A.hs
"zycdefg"
Now, using regexes instead we can get by with just the regex-compat lib,
providing:
import Text.Regex
I usually flip the arguments to subRegex, since they're in the wrong
order for composition (anyone else noticed this?):
sub re y s = subRegex re s y
regex = mkRegex
Now , using proper regexes, we can write:
main = print (clean "abcdefg")
clean = sub (regex "b") "y"
. sub (regex "a") "z"
Running this:
$ runhaskell A.hs
"zycdefg"
Similar results will be achieved with the other regex-* packages:
http://haskell.org/haskellwiki/Libraries_and_tools/Compiler_tools#Regular_expressions
I think TRE might be preferred for high performance cases.
-- Don
More information about the Haskell-Cafe
mailing list