The nemesis package

[ Tags: bsd3, library, tools ] [ Propose Tags ]

a rake like task management tool


[Skip to Readme]

Properties

Versions 2009.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.10.4.1.1, 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, 2016.3.19
Change log changelog.md
Dependencies base (==4.*), containers, data-default, directory, Glob (>=0.4), haskell98, mtl, process [details]
License BSD3
Author Wang, Jinjing
Maintainer Wang, Jinjing <nfjinjing@gmail.com>
Category Web
Home page http://github.com/nfjinjing/nemesis
Uploaded Sun Jun 14 00:57:03 UTC 2009 by JinjingWang
Distributions NixOS:2016.3.19
Executables nemesis
Downloads 5358 total (52 in the last 30 days)
Rating 0.0 (0 ratings) [clear rating]
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for nemesis-2009.6.14.3

[back to package description]

Nemesis: a rake like task management tool for haskell

Demo

nemesis = do

  clean
    [ "**/*.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"

Tutorial

Install

cabal update; cabal install nemesis

DSL

Put the following code into a file named Nemesis

nemesis = do

  -- desc is optional, it gives some description to the following task
  desc "learn Haskell"
  
  -- syntax: task "keyword: dependencies" io-action
  task "learn-haskell: learn-fp" (putStrLn "Haskell is awesome!")

  desc "learn Functional Programming"
  task "learn-fp: learn-lisp" $ do
    sh "echo 'into FP'"

  desc "learn LISP"
  task "learn-lisp" $ do
    sh "echo 'LISP is cool!'"

run nemesis

It will generate a bin .nemesis inside your current folder.

Run

run ./.nemesis

     learn-fp: learn Functional Programming
learn-haskell: learn Haskell
   learn-lisp: learn LISP

run ./.nemesis learn-haskell

LISP is cool!
into FP
Haskell is awesome!

Namespace

Suppose you have the following tasks

namespace "eat" $ do

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


namespace "drink" $ do

  task "coke" $ putStrLn "drinking coke"

then

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

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

Advance usage

Use LANGUAGE

Use a separator below language extensions, e.g.

{-# LANGUAGE QuasiQuotes #-}

-- Nem

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

currently the separator -- Nem is hard coded

Build it yourself

If you don't want nemesis to compile Nemesis through intermediate nemesis-tmp.hs file, rename your Nemesis to Nemesis.hs, then start with this template.

import System.Nemesis (run)
import System.Nemesis.DSL

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

The logic is that whenever main is defined in Nemesis.hs, nemesis will act as ghc --make wrapper, so you can get nice error messages.

Hint

Save typing by aliasing ./.nemesis to n, i.e. inside .your_shellrc

alias n="./.nemesis"