The nemesis package

[Tags: bsd3, library]

smart per project code snippets

[Skip to ReadMe]


Versions2009.6.12, 2009.6.13, 2009.6.13.1, 2009.6.13.2, 2009.6.14, 2009.6.14.1, 2009.6.14.2, 2009.6.14.3, 2009.6.24, 2009.6.25, 2009.8.4, 2009.8.16, 2009.8.17, 2009.8.18, 2009.10.7, 2010.10.4, 2010., 2011.6.12, 2011.6.19, 2011.10.12, 2012.5.24, 2012.5.24.1, 2012.12.18, 2013.6.13, 2013.6.16, 2013.6.22, 2013.7.27, 2014.5.19, 2015.5.4
Dependenciesbase (==4.*), containers, data-default, directory, Glob (>=0.4), haskell98, mps (>=2009.9.18), mtl, old-time, process, time [details]
AuthorJinjing Wang
MaintainerJinjing Wang <>
Home page
UploadedSun Oct 3 21:05:46 UTC 2010 by JinjingWang
Downloads3754 total (159 in last 30 days)
0 []
StatusDocs uploaded by user
Build status unknown [no reports yet]




Maintainers' corner

For package maintainers and hackage trustees

Readme for nemesis-2010.10.4

Nemesis: a rake like task management tool for haskell


nemesis = do

    [ "**/*.hi"
    , "**/*.o"
    , "manifest"
  task "dist" - do
    sh "cabal clean"
    sh "cabal configure"
    sh "cabal sdist"

  task "i" (sh "ghci -isrc src/System/Nemesis.hs")

  task "manifest" - do
    sh "find . | grep 'hs$' > manifest"



cabal update; cabal install nemesis


Put the following code into a file named Nemesis

nemesis = do

  -- desc is optional, it gives some description to the following task
  desc "Hunter attack macro"

  -- syntax: task "keyword: dependencies" io-action
  task "attack: pet-attack auto-attack" (putStrLn "attack macro done!")

  desc "Pet attack"
  task "pet-attack: mark" - do
    sh "echo 'pet attack'"

  desc "Hunter's mark"
  task "mark" - do
    sh "echo \"casting hunter's mark\""

  desc "Auto attack"
  task "auto-attack" - do
    sh "echo 'auto shoot'"


run nemesis

attack                            : Hunter attack macro
auto-attack                       : Auto attack
mark                              : Hunter's mark
pet-attack                        : Pet attack

run nemesis attack

casting hunter's mark
pet attack
auto shoot
attack macro done!


Suppose you have the following tasks

nemesis = do

  namespace "eat" - do

    task "bread: salad" - putStrLn "eating bread"
    task "salad: /drink/coke" - putStrLn "nice salad"

  namespace "drink" - do

    task "coke" - putStrLn "drinking coke"


nemesis bread =>
.nemesis: bread does not exist!

nemesis eat/bread =>
drinking coke
nice salad
eating bread

Advance usage

Use LANGUAGE progam

Put a -- Nem token after the Langauge progma

{-# LANGUAGE QuasiQuotes #-}

-- Nem

nemesis = do
  task "i" (sh "ghci -isrc src/System/Nemesis.hs")

currently the separator -- Nem is hard coded

By pass preprocessing, e.g. use custom imports

Define main, i.e. add main = run nemesis in the code. The preprocessor look for the function main, if it's defined, it skip preprocessing, and Nemesis because pure EDSL that can be run by runhaskell.

For example:

import System.Nemesis (run)
import System.Nemesis.DSL
import MPS.Light ((-))
import Prelude hiding ((-))

nemesis = do
  task "i" (sh "ghci -isrc src/System/Nemesis.hs")
main = run nemesis

Test out by:

runghc Nemesis

Who is mnemosyne?


OK, I made a mistake in the project name, but she's a cool goddess none the less.