[Haskell-cafe] Reinvention
Andrew Coppin
andrewcoppin at btinternet.com
Wed Jun 27 15:06:24 EDT 2007
I seem to be forever writing code that looks like this:
decode :: String -> (SKI,String)
decode (c:cs) = case c of
'S' -> (S,cs)
'K' -> (K,cs)
'I' -> (I,cs)
'*' -> let (e0,cs0) = decode cs; (e1,cs1) = decode cs1 in (e0 :@: e1, cs1)
In other words, lots and lots of functions with signatures like
foo :: [Foo] -> (Bar,[Foo])
that likes to call itself recursively, or that gets called from
somewhere else.
Is there a Better Way(tm) to do this? It looks like such a common idiom
that you'd expect to see "something" in the libraries somewhere.
(I remember being puzzled that there was no library function for
creating a Cartesian product of two lists. Puzzled until I realised that
the monadic nature of lists make it utterly trivial to do this by hand
anyway! So it's not always obvious to know what you're looking for...)
More information about the Haskell-Cafe
mailing list