diff --git a/Grow.cabal b/Grow.cabal
new file mode 100644
--- /dev/null
+++ b/Grow.cabal
@@ -0,0 +1,18 @@
+name:          Grow
+version:       1.0
+
+synopsis:      A declarative make-like interpreter.
+description:   
+author:        Marc Coiffier
+maintainer:    marc.coiffier@gmail.com
+license:       PublicDomain
+
+build-type:    Simple
+cabal-version: >=1.10
+
+library
+  exposed-modules: Grow Grow.Syntax
+  build-depends: base (== 4.6.*), definitive-base (== 1.0.*), containers (== 0.5.*), deepseq (== 1.3.*), array (== 0.5.*), bytestring (== 0.10.*), definitive-filesystem (== 1.0.*), clock (== 0.4.*), directory (== 1.2.*), filepath (== 1.3.*), time (== 1.4.*), old-locale (== 1.0.*), unix (== 2.7.*), definitive-parser (== 1.0.*), vector (== 0.10.*), primitive (== 0.5.*)
+  default-extensions: RebindableSyntax NoMonomorphismRestriction
+  ghc-options: 
+  default-language: Haskell2010
diff --git a/Grow.hs b/Grow.hs
new file mode 100644
--- /dev/null
+++ b/Grow.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE RebindableSyntax, NoMonomorphismRestriction, FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}
+module Grow where
+
+import Algebra
+import IO.Filesystem
+import qualified Prelude as P
+import Algebra.Parser
+import Grow.Syntax
+
+pureVal :: SyntaxT Id -> SyntaxT Id
+pureVal = id
+
+main :: IO ()
+main = print =<< (P.readFile "Seed" <&> map2 pureVal growExpr^..parser)
diff --git a/Grow/Syntax.hs b/Grow/Syntax.hs
new file mode 100644
--- /dev/null
+++ b/Grow/Syntax.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}
+module Grow.Syntax(
+  module Data.Syntax,
+  growExpr
+  ) where
+
+import Algebra
+import Algebra.Parser
+import Data.Containers
+import Data.Syntax
+import Data.Char
+
+instance MonadReader a Id where
+  ask = pure undefined
+  local _ = id
+
+growExpr :: Parser String [SyntaxT Id]
+growExpr = free expr `sepBy1` free (single ';')
+  where
+    decl = (,)<$>symbol<*>(free (single '=') >> free expr)
+    free = (many space >> )
+    symbol = many1 (satisfy symChar)
+      where symChar c = isAlphaNum c || (c`elem`"/+-_~%*!")
+    funAp = (atom`sepBy1`spaces) <&> ValList . map pure
+    expr = chainr funAp (op <$> free (single ':' >> (atom <* space))) funAp
+      where op f a b = ValList [pure f,pure a,pure b]
+    atom = between (single '(') (free $ single ')') (free inParen) + list + dictionary + (Text<$>symbol) + dollar
+      where dollar = single '$' >> (atom <&> \e -> ValList [pure $ Text "$",pure e])
+    inParen = Function . lambdaSum<$>(free abstract`sepBy`free (single '|'))
+              <+> expr
+    abstract = lambda<$>atom<*>free (several "~>")*>free expr
+    
+    list = funcall (pure $ Function id).pure.ValList . map pure
+           <$>between (single '[') (free $ single ']') (free expr`sepBy`free (single ','))
+    dictionary = mkDict<$>between (single '{') (free $ single '}') (free decl`sepBy`free (single ','))
+    mkDict = Dictionary . fromList . map (\(s,v) -> (s,pure v))
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
