ANN: template 0.1 - Simple string substitution

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

ANN: template 0.1 - Simple string substitution

Johan Tibell-2
As an exercise I wrote a simple string substitution library that supports
"$"-based substitution ala Perl or Python. Example usage:

> import qualified Data.ByteString.Lazy.Char8 as B
> import Text.Template
>
> context = Map.fromList . map packPair
>     where packPair (x, y) = (B.pack x, B.pack y)
>
> helloTemplate = B.pack "Hello, $name! Want some ${fruit}s?"
> helloContext = context [("name", "Johan"), ("fruit", "banana")]
>
> main = B.putStrLn $ substitute helloTemplate helloContext

Hopefully this is useful for someone who needs something more readable
than Text.Printf's "%s"-based substitution or string concatenation for
longer strings but less than a full blown templating system like the
ones found in most web frameworks.

Release:
http://www.johantibell.com/template/template-0.1.tar.gz

Source:
darcs get http://darcs.johantibell.com/template

Once we get ByteString literals most of the noise in the above example
will disappear. In the mean time it's probably a good idea to write
utility function like "context" above when you prefer a convenient
String interface to a somewhat faster ByteString interface.

It would be great if someone could do a code review and add it to
Hackage if it looks OK. I'll really appreciate the feedback. Also, I'm
not 100% sure how to make the haddock links work with Hackage so they
link to the library docs. Is this something done at upload time?

Here are some open issues:

   * I currently use my own ByteString parser. Data.Binary almost does
what I need. Basically I need takeWhile and two chars of look-ahead.

   * I would like to only depend on base, currently I use State so I
depend on mtl.

Cheers,

Johan
_______________________________________________
Haskell mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell