diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c)2012, Jonathan Fischoff
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Jonathan Fischoff nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/LambdaPrettyQuote.cabal b/LambdaPrettyQuote.cabal
new file mode 100644
--- /dev/null
+++ b/LambdaPrettyQuote.cabal
@@ -0,0 +1,81 @@
+-- LambdaPrettyQuote.cabal auto-generated by cabal init. For
+-- additional options, see
+-- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.
+-- The name of the package.
+Name:                LambdaPrettyQuote
+
+-- The package version. See the Haskell package versioning policy
+-- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
+-- standards guiding when and how versions should be incremented.
+Version:             0.0.0.1
+
+-- A short (one-line) description of the package.
+Synopsis:            Parser, pretty printer, quasiquoter, and Arbitrary helpers for the untyped lambda calculus.
+
+homepage: http://github.com/jfischoff/LambdaPrettyQuote
+
+-- A longer description of the package.
+-- Description:         
+
+-- The license under which the package is released.
+License:             BSD3
+
+-- The file containing the license text.
+License-file:        LICENSE
+
+-- The package author(s).
+Author:              Jonathan Fischoff
+
+-- An email address to which users can send suggestions, bug reports,
+-- and patches.
+Maintainer:          jonathangfischoff@gmail.com
+
+-- A copyright notice.
+-- Copyright:           
+
+Category:            Language
+
+Build-type:          Simple
+
+-- Extra files to be distributed with the package, such as examples or
+-- a README.
+-- Extra-source-files:  
+
+-- Constraint on the version of Cabal needed to build this package.
+Cabal-version:       >=1.8
+
+
+Library
+  -- Modules exported by the library.
+  Exposed-modules: Language.Lambda.Arbitrary, Language.Lambda.Parser, Language.Lambda.Pretty, Language.Lambda.Quote
+  Hs-Source-Dirs: src
+  -- Packages needed in order to build this package.
+  Build-depends: base >= 4.0 && <= 6.0,
+                 QuickCheck >= 2.4.1.1,
+                 test-framework-quickcheck2 >= 0.2.10,
+                 test-framework-hunit >= 0.2.7,
+                 test-framework >= 0.4.1.1,
+                 lambda-ast,
+                 HUnit >= 1.2.4.2,
+                 DebugTraceHelpers >= 0.12,
+                 template-haskell >= 2.6.0.0,
+                 transformers >= 0.2.2.0,
+                 parsec >= 3.1.2
+  ghc-options:            -Wall
+
+Test-Suite tests
+  Hs-Source-Dirs: src, tests
+  type:       exitcode-stdio-1.0
+  main-is:    Main.hs
+  build-depends: base >= 4.0 && <= 6.0,
+                    QuickCheck >= 2.4.1.1,
+                    test-framework-quickcheck2 >= 0.2.10,
+                    test-framework-hunit >= 0.2.7,
+                    test-framework >= 0.4.1.1,
+                    lambda-ast,
+                    HUnit >= 1.2.4.2,
+                    DebugTraceHelpers >= 0.12,
+                    template-haskell >= 2.6.0.0,
+                    transformers >= 0.2.2.0,
+                    parsec >= 3.1.2     
+  
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/src/Language/Lambda/Arbitrary.hs b/src/Language/Lambda/Arbitrary.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Lambda/Arbitrary.hs
@@ -0,0 +1,47 @@
+{- | This module provides the code of QuickCheck instances, but doesn't declare the instances
+   Of the whole orphan deal, oh well. 
+ 
+    Anyway, to use you will need to copy the following code somewhere
+> Instance Arbitrary Expr where
+>     arbitrary = expr_arb  
+>     shrink    = gexpr_shrink
+ There is also a gexpr_arb that takes in a generator for the symbol type
+-}
+module Language.Lambda.Arbitrary where
+import Test.QuickCheck
+import Control.Applicative ((<*>), (<$>))
+import Data.List
+import Language.Lambda.AST
+
+-- | An arbitrary function for Expr. See the example above.
+expr_arb :: Gen Expr
+expr_arb = gexpr_arb sym_arbitrary
+
+-- | Generates a string like "x_{n}" where n is positive integer
+sym_arbitrary :: Gen String 
+sym_arbitrary = do
+    index <- suchThat (arbitrary :: Gen Int) (>0)
+    return $ ("x_" ++ (show index))
+    
+-- | Shrink function for an GExpr. See the example at the top of the module    
+gexpr_shrink :: GExpr a -> [GExpr a]
+gexpr_shrink x@(Var _) = [x]
+gexpr_shrink (App x y) = [x, y]
+gexpr_shrink (Lam _ y) = [y]
+   
+-- | Helper function for creating generators for GExpr. Takes in a generator for the symbol type
+gexpr_arb :: Gen a -> Gen (GExpr a) 
+gexpr_arb sym_gen = sized $ \x -> gexpr_arb' x sym_gen
+
+-- | Helper function for creating generators for GExpr. Takes in a generator for the symbol type and the
+-- "depth" of the expression tree
+gexpr_arb' :: Int -> Gen s -> Gen (GExpr s)
+gexpr_arb' 0 s_arb = Var <$> s_arb
+gexpr_arb' n s_arb = do
+    option <- choose(0, 2) :: Gen Int
+    case option of
+        0 -> Var <$> s_arb
+        1 -> App <$> gexpr_arb' (n - 1) s_arb <*> gexpr_arb' (n - 1) s_arb
+        2 -> Lam <$> s_arb                    <*> gexpr_arb' (n - 1) s_arb
+        _ -> error "choose messed up!"
+        
diff --git a/src/Language/Lambda/Parser.hs b/src/Language/Lambda/Parser.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Lambda/Parser.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-- | Parser for the lambda AST built of parsec. No Support for AntiExpr yet. Probably not efficent -}
+module Language.Lambda.Parser where
+import Text.Parsec 
+import Language.Lambda.AST
+import Data.Functor.Identity
+import Data.List
+
+type M = Identity
+
+{-
+data AntiExpr = AntiVar String
+              | AntiLam String
+              | AntiApp String
+           
+type Output = (Expr, Maybe AntiExpr)
+-}
+
+type Output = Expr
+
+top_expr :: ParsecT String u M Output
+top_expr = do 
+    spaces
+    e <- parse_expr
+    spaces
+    eof
+    return e
+    
+parse_expr :: ParsecT String u M Output
+parse_expr =  try parse_aexpr 
+          <|> try parse_lambda
+ 
+parse_aexpr :: ParsecT String u M Output
+parse_aexpr =  try parse_app 
+           <|> try parse_atom
+
+parse_lambda :: ParsecT String u M Output
+parse_lambda = do
+    _ <- char '\\'
+    sym  <- parse_sym <?> "lambda argument"
+    _ <- char '.'
+    expr <- parse_expr <?> "lambda expression"
+    return $ Lam sym expr
+
+parse_app :: ParsecT String u M Output
+parse_app = do
+    expr_0 <- parse_atom <?> "first apply argument"
+    spaces
+    as <-  sepBy1 parse_atom spaces <?> "other apply arguments"
+    return $ foldl' App expr_0 as
+
+parse_atom :: ParsecT String u M Output
+parse_atom =  try  (parens'  parse_expr)
+          <|> try parse_var 
+
+parse_var :: ParsecT String u M Output
+parse_var = do
+    spaces
+    sym <- parse_sym <?> "Var symbol"
+    return $ Var sym 
+
+parse_sym :: ParsecT String u M String
+parse_sym = many1 (alphaNum <|> char '_') <?> "symbol"
+
+parens' :: Stream s m Char => ParsecT s u m b -> ParsecT s u m b
+parens' p = do 
+    _ <- char '('
+    e <- p
+    _ <- char ')'
+    return e
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Language/Lambda/Pretty.hs b/src/Language/Lambda/Pretty.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Lambda/Pretty.hs
@@ -0,0 +1,15 @@
+{-- | Pretty printers for lambda expression -}
+module Language.Lambda.Pretty where
+import Language.Lambda.AST
+
+-- | Pretty prints a Expr
+ppr :: Expr -> String
+ppr (Var x)   = x
+ppr (App x y) = "(" ++ ppr x ++ " " ++ ppr y ++ ")" 
+ppr (Lam x y) = "(\\" ++ x ++ "." ++ ppr y ++ ")"
+
+-- | Pretty prints a GExpr 
+g_ppr :: (Show a) => GExpr a -> String
+g_ppr (Var x)   = show x
+g_ppr (App x y) = "(" ++ g_ppr x ++ " " ++ g_ppr y ++ ")" 
+g_ppr (Lam x y) = "(\\" ++ show x ++ "." ++ g_ppr y ++ ")"
diff --git a/src/Language/Lambda/Quote.hs b/src/Language/Lambda/Quote.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Lambda/Quote.hs
@@ -0,0 +1,31 @@
+{-# LANGUAGE TemplateHaskell, QuasiQuotes, DeriveDataTypeable, StandaloneDeriving #-}
+module Language.Lambda.Quote where
+import Language.Haskell.TH.Quote
+import Language.Haskell.TH
+import Language.Lambda.Parser
+import Language.Lambda.AST
+import Text.Parsec (runParser)
+import Data.Data
+
+deriving instance Typeable1 GExpr
+deriving instance (Data a) =>  Data (GExpr a) 
+
+--TODO make the pattern quoter and the anti expr
+lam :: QuasiQuoter
+lam = QuasiQuoter quoteExprExp undefined undefined undefined
+
+parseExpr :: Monad m => (String, Int, Int) -> String -> m Expr
+parseExpr (file, line, col) s = result where
+    result = case runParser top_expr () file s of
+                  Left err  -> fail $ (show err ++ " at file " ++ file ++ " at line " ++ 
+                                          show line ++ " at col " ++ show col)
+                  Right e   -> return e
+    
+quoteExprExp :: String -> ExpQ
+quoteExprExp s =  do  loc <- location
+                      let pos =  (loc_filename loc,
+                                 fst (loc_start loc),
+                                 snd (loc_start loc))
+                      parsed_expr <- parseExpr pos s
+                      dataToExpQ (const Nothing) parsed_expr
+                      
