On Thu, Jun 14, 2007 at 05:55:46PM -0700, Greg Fitzgerald wrote: > Has anyone embedded a build language in Haskell? Something like > Rake<http://rake.rubyforge.org/>is to Ruby, but in Haskell or any > statically-typed functional language.
I have. It consists of such components: - A type for build rules type Rule = FilePath -> Maybe (BuildMonad (IO ())) newtype BuildMonad a = BuildMonad { runBuildMonad :: WriterT [FilePath] IO a } deriving (Monad, MonadWriter [FilePath]) Every rule has three levels: - matching target file names :: FilePath -> Maybe a - generating dependencies :: WriterT [FilePath] m a - target building :: IO () The levels are nested in a way that allows to use variables bound on one level in the levels below. - An simple rule execution engine - takes a list of rules and tries to build given targets taking care of dependencies - A small library of useful functions, eg. for using temporary files with automatic renaming on successful completion (so you don't end up with partially built targets). - A small Template Haskell library for Perl-like string interpolation to help constructing shell commands If you want to see the code I will try to release it (it's in a company's project), but it's quite small and IMHO the nicest thing in it is the overall idea. It's quite heavy for simple uses, but in more complicated cases it allows things which are nearly (or literally) impossible in GNU make. Best regards Tomek _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe