diff --git a/.git/#COMMIT_EDITMSG# b/.git/#COMMIT_EDITMSG#
deleted file mode 100644
--- a/.git/#COMMIT_EDITMSG#
+++ /dev/null
@@ -1,26 +0,0 @@
-
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-# On branch master
-# Your branch is up-to-date with 'origin/master'.
-#
-# Changes to be committed:
-#	modified:   src/Language/Haskell/TH/Utils.hs
-#	modified:   template-haskell-util.cabal
-#
-# Changes not staged for commit:
-#	deleted:    dist/build/HStemplate-haskell-util-0.1.0.0.o
-#	deleted:    dist/build/Language/Haskell/TH/Utils.hi
-#	deleted:    dist/build/Language/Haskell/TH/Utils.o
-#	deleted:    dist/build/autogen/Paths_template_haskell_util.hs
-#	deleted:    dist/build/autogen/cabal_macros.h
-#	deleted:    dist/build/libHStemplate-haskell-util-0.1.0.0.a
-#	deleted:    dist/package.conf.inplace/package.cache
-#	deleted:    dist/package.conf.inplace/template-haskell-util-0.1.0.0-inplace.conf
-#	deleted:    dist/setup-config
-#	deleted:    dist/setup/setup.hs
-#	deleted:    dist/setup/setup.version
-#
-# Untracked files:
-#	#README.md#
-#
diff --git a/.git/COMMIT_EDITMSG b/.git/COMMIT_EDITMSG
deleted file mode 100644
--- a/.git/COMMIT_EDITMSG
+++ /dev/null
@@ -1,10 +0,0 @@
-cabal file update
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-# On branch master
-# Your branch is ahead of 'origin/master' by 1 commit.
-#   (use "git push" to publish your local commits)
-#
-# Changes to be committed:
-#	modified:   template-haskell-util.cabal
-#
diff --git a/.git/COMMIT_EDITMSG~ b/.git/COMMIT_EDITMSG~
deleted file mode 100644
--- a/.git/COMMIT_EDITMSG~
+++ /dev/null
@@ -1,10 +0,0 @@
-
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-# On branch master
-# Your branch is ahead of 'origin/master' by 1 commit.
-#   (use "git push" to publish your local commits)
-#
-# Changes to be committed:
-#	modified:   template-haskell-util.cabal
-#
diff --git a/.git/HEAD b/.git/HEAD
deleted file mode 100644
--- a/.git/HEAD
+++ /dev/null
@@ -1,1 +0,0 @@
-ref: refs/heads/master
diff --git a/.git/config b/.git/config
deleted file mode 100644
--- a/.git/config
+++ /dev/null
@@ -1,14 +0,0 @@
-[core]
-	repositoryformatversion = 0
-	filemode = false
-	bare = false
-	logallrefupdates = true
-	symlinks = false
-	ignorecase = true
-	hideDotFiles = dotGitOnly
-[remote "origin"]
-	url = https://github.com/HaskellZhangSong/TemplateHaskellUtils.git
-	fetch = +refs/heads/*:refs/remotes/origin/*
-[branch "master"]
-	remote = origin
-	merge = refs/heads/master
diff --git a/.git/description b/.git/description
deleted file mode 100644
--- a/.git/description
+++ /dev/null
@@ -1,1 +0,0 @@
-Unnamed repository; edit this file 'description' to name the repository.
diff --git a/.git/hooks/applypatch-msg.sample b/.git/hooks/applypatch-msg.sample
deleted file mode 100644
--- a/.git/hooks/applypatch-msg.sample
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message taken by
-# applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.  The hook is
-# allowed to edit the commit message file.
-#
-# To enable this hook, rename this file to "applypatch-msg".
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/commit-msg" &&
-	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
-:
diff --git a/.git/hooks/commit-msg.sample b/.git/hooks/commit-msg.sample
deleted file mode 100644
--- a/.git/hooks/commit-msg.sample
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message.
-# Called by "git commit" with one argument, the name of the file
-# that has the commit message.  The hook should exit with non-zero
-# status after issuing an appropriate message if it wants to stop the
-# commit.  The hook is allowed to edit the commit message file.
-#
-# To enable this hook, rename this file to "commit-msg".
-
-# Uncomment the below to add a Signed-off-by line to the message.
-# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
-# hook is more suited to it.
-#
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
-
-# This example catches duplicate Signed-off-by lines.
-
-test "" = "$(grep '^Signed-off-by: ' "$1" |
-	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
-	echo >&2 Duplicate Signed-off-by lines.
-	exit 1
-}
diff --git a/.git/hooks/post-update.sample b/.git/hooks/post-update.sample
deleted file mode 100644
--- a/.git/hooks/post-update.sample
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to prepare a packed repository for use over
-# dumb transports.
-#
-# To enable this hook, rename this file to "post-update".
-
-exec git update-server-info
diff --git a/.git/hooks/pre-applypatch.sample b/.git/hooks/pre-applypatch.sample
deleted file mode 100644
--- a/.git/hooks/pre-applypatch.sample
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed
-# by applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.
-#
-# To enable this hook, rename this file to "pre-applypatch".
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/pre-commit" &&
-	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
-:
diff --git a/.git/hooks/pre-commit.sample b/.git/hooks/pre-commit.sample
deleted file mode 100644
--- a/.git/hooks/pre-commit.sample
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed.
-# Called by "git commit" with no arguments.  The hook should
-# exit with non-zero status after issuing an appropriate message if
-# it wants to stop the commit.
-#
-# To enable this hook, rename this file to "pre-commit".
-
-if git rev-parse --verify HEAD >/dev/null 2>&1
-then
-	against=HEAD
-else
-	# Initial commit: diff against an empty tree object
-	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
-fi
-
-# If you want to allow non-ASCII filenames set this variable to true.
-allownonascii=$(git config --bool hooks.allownonascii)
-
-# Redirect output to stderr.
-exec 1>&2
-
-# Cross platform projects tend to avoid non-ASCII filenames; prevent
-# them from being added to the repository. We exploit the fact that the
-# printable range starts at the space character and ends with tilde.
-if [ "$allownonascii" != "true" ] &&
-	# Note that the use of brackets around a tr range is ok here, (it's
-	# even required, for portability to Solaris 10's /usr/bin/tr), since
-	# the square bracket bytes happen to fall in the designated range.
-	test $(git diff --cached --name-only --diff-filter=A -z $against |
-	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
-then
-	cat <<\EOF
-Error: Attempt to add a non-ASCII file name.
-
-This can cause problems if you want to work with people on other platforms.
-
-To be portable it is advisable to rename the file.
-
-If you know what you are doing you can disable this check using:
-
-  git config hooks.allownonascii true
-EOF
-	exit 1
-fi
-
-# If there are whitespace errors, print the offending file names and fail.
-exec git diff-index --check --cached $against --
diff --git a/.git/hooks/pre-push.sample b/.git/hooks/pre-push.sample
deleted file mode 100644
--- a/.git/hooks/pre-push.sample
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-
-# An example hook script to verify what is about to be pushed.  Called by "git
-# push" after it has checked the remote status, but before anything has been
-# pushed.  If this script exits with a non-zero status nothing will be pushed.
-#
-# This hook is called with the following parameters:
-#
-# $1 -- Name of the remote to which the push is being done
-# $2 -- URL to which the push is being done
-#
-# If pushing without using a named remote those arguments will be equal.
-#
-# Information about the commits which are being pushed is supplied as lines to
-# the standard input in the form:
-#
-#   <local ref> <local sha1> <remote ref> <remote sha1>
-#
-# This sample shows how to prevent push of commits where the log message starts
-# with "WIP" (work in progress).
-
-remote="$1"
-url="$2"
-
-z40=0000000000000000000000000000000000000000
-
-IFS=' '
-while read local_ref local_sha remote_ref remote_sha
-do
-	if [ "$local_sha" = $z40 ]
-	then
-		# Handle delete
-		:
-	else
-		if [ "$remote_sha" = $z40 ]
-		then
-			# New branch, examine all commits
-			range="$local_sha"
-		else
-			# Update to existing branch, examine new commits
-			range="$remote_sha..$local_sha"
-		fi
-
-		# Check for WIP commit
-		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
-		if [ -n "$commit" ]
-		then
-			echo "Found WIP commit in $local_ref, not pushing"
-			exit 1
-		fi
-	fi
-done
-
-exit 0
diff --git a/.git/hooks/pre-rebase.sample b/.git/hooks/pre-rebase.sample
deleted file mode 100644
--- a/.git/hooks/pre-rebase.sample
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2006, 2008 Junio C Hamano
-#
-# The "pre-rebase" hook is run just before "git rebase" starts doing
-# its job, and can prevent the command from running by exiting with
-# non-zero status.
-#
-# The hook is called with the following parameters:
-#
-# $1 -- the upstream the series was forked from.
-# $2 -- the branch being rebased (or empty when rebasing the current branch).
-#
-# This sample shows how to prevent topic branches that are already
-# merged to 'next' branch from getting rebased, because allowing it
-# would result in rebasing already published history.
-
-publish=next
-basebranch="$1"
-if test "$#" = 2
-then
-	topic="refs/heads/$2"
-else
-	topic=`git symbolic-ref HEAD` ||
-	exit 0 ;# we do not interrupt rebasing detached HEAD
-fi
-
-case "$topic" in
-refs/heads/??/*)
-	;;
-*)
-	exit 0 ;# we do not interrupt others.
-	;;
-esac
-
-# Now we are dealing with a topic branch being rebased
-# on top of master.  Is it OK to rebase it?
-
-# Does the topic really exist?
-git show-ref -q "$topic" || {
-	echo >&2 "No such branch $topic"
-	exit 1
-}
-
-# Is topic fully merged to master?
-not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
-if test -z "$not_in_master"
-then
-	echo >&2 "$topic is fully merged to master; better remove it."
-	exit 1 ;# we could allow it, but there is no point.
-fi
-
-# Is topic ever merged to next?  If so you should not be rebasing it.
-only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
-only_next_2=`git rev-list ^master           ${publish} | sort`
-if test "$only_next_1" = "$only_next_2"
-then
-	not_in_topic=`git rev-list "^$topic" master`
-	if test -z "$not_in_topic"
-	then
-		echo >&2 "$topic is already up-to-date with master"
-		exit 1 ;# we could allow it, but there is no point.
-	else
-		exit 0
-	fi
-else
-	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
-	/usr/bin/perl -e '
-		my $topic = $ARGV[0];
-		my $msg = "* $topic has commits already merged to public branch:\n";
-		my (%not_in_next) = map {
-			/^([0-9a-f]+) /;
-			($1 => 1);
-		} split(/\n/, $ARGV[1]);
-		for my $elem (map {
-				/^([0-9a-f]+) (.*)$/;
-				[$1 => $2];
-			} split(/\n/, $ARGV[2])) {
-			if (!exists $not_in_next{$elem->[0]}) {
-				if ($msg) {
-					print STDERR $msg;
-					undef $msg;
-				}
-				print STDERR " $elem->[1]\n";
-			}
-		}
-	' "$topic" "$not_in_next" "$not_in_master"
-	exit 1
-fi
-
-exit 0
-
-################################################################
-
-This sample hook safeguards topic branches that have been
-published from being rewound.
-
-The workflow assumed here is:
-
- * Once a topic branch forks from "master", "master" is never
-   merged into it again (either directly or indirectly).
-
- * Once a topic branch is fully cooked and merged into "master",
-   it is deleted.  If you need to build on top of it to correct
-   earlier mistakes, a new topic branch is created by forking at
-   the tip of the "master".  This is not strictly necessary, but
-   it makes it easier to keep your history simple.
-
- * Whenever you need to test or publish your changes to topic
-   branches, merge them into "next" branch.
-
-The script, being an example, hardcodes the publish branch name
-to be "next", but it is trivial to make it configurable via
-$GIT_DIR/config mechanism.
-
-With this workflow, you would want to know:
-
-(1) ... if a topic branch has ever been merged to "next".  Young
-    topic branches can have stupid mistakes you would rather
-    clean up before publishing, and things that have not been
-    merged into other branches can be easily rebased without
-    affecting other people.  But once it is published, you would
-    not want to rewind it.
-
-(2) ... if a topic branch has been fully merged to "master".
-    Then you can delete it.  More importantly, you should not
-    build on top of it -- other people may already want to
-    change things related to the topic as patches against your
-    "master", so if you need further changes, it is better to
-    fork the topic (perhaps with the same name) afresh from the
-    tip of "master".
-
-Let's look at this example:
-
-		   o---o---o---o---o---o---o---o---o---o "next"
-		  /       /           /           /
-		 /   a---a---b A     /           /
-		/   /               /           /
-	       /   /   c---c---c---c B         /
-	      /   /   /             \         /
-	     /   /   /   b---b C     \       /
-	    /   /   /   /             \     /
-    ---o---o---o---o---o---o---o---o---o---o---o "master"
-
-
-A, B and C are topic branches.
-
- * A has one fix since it was merged up to "next".
-
- * B has finished.  It has been fully merged up to "master" and "next",
-   and is ready to be deleted.
-
- * C has not merged to "next" at all.
-
-We would want to allow C to be rebased, refuse A, and encourage
-B to be deleted.
-
-To compute (1):
-
-	git rev-list ^master ^topic next
-	git rev-list ^master        next
-
-	if these match, topic has not merged in next at all.
-
-To compute (2):
-
-	git rev-list master..topic
-
-	if this is empty, it is fully merged to "master".
diff --git a/.git/hooks/prepare-commit-msg.sample b/.git/hooks/prepare-commit-msg.sample
deleted file mode 100644
--- a/.git/hooks/prepare-commit-msg.sample
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to prepare the commit log message.
-# Called by "git commit" with the name of the file that has the
-# commit message, followed by the description of the commit
-# message's source.  The hook's purpose is to edit the commit
-# message file.  If the hook fails with a non-zero status,
-# the commit is aborted.
-#
-# To enable this hook, rename this file to "prepare-commit-msg".
-
-# This hook includes three examples.  The first comments out the
-# "Conflicts:" part of a merge commit.
-#
-# The second includes the output of "git diff --name-status -r"
-# into the message, just before the "git status" output.  It is
-# commented because it doesn't cope with --amend or with squashed
-# commits.
-#
-# The third example adds a Signed-off-by line to the message, that can
-# still be edited.  This is rarely a good idea.
-
-case "$2,$3" in
-  merge,)
-    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
-
-# ,|template,)
-#   /usr/bin/perl -i.bak -pe '
-#      print "\n" . `git diff --cached --name-status -r`
-#	 if /^#/ && $first++ == 0' "$1" ;;
-
-  *) ;;
-esac
-
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
diff --git a/.git/hooks/update.sample b/.git/hooks/update.sample
deleted file mode 100644
--- a/.git/hooks/update.sample
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to blocks unannotated tags from entering.
-# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
-#
-# To enable this hook, rename this file to "update".
-#
-# Config
-# ------
-# hooks.allowunannotated
-#   This boolean sets whether unannotated tags will be allowed into the
-#   repository.  By default they won't be.
-# hooks.allowdeletetag
-#   This boolean sets whether deleting tags will be allowed in the
-#   repository.  By default they won't be.
-# hooks.allowmodifytag
-#   This boolean sets whether a tag may be modified after creation. By default
-#   it won't be.
-# hooks.allowdeletebranch
-#   This boolean sets whether deleting branches will be allowed in the
-#   repository.  By default they won't be.
-# hooks.denycreatebranch
-#   This boolean sets whether remotely creating branches will be denied
-#   in the repository.  By default this is allowed.
-#
-
-# --- Command line
-refname="$1"
-oldrev="$2"
-newrev="$3"
-
-# --- Safety check
-if [ -z "$GIT_DIR" ]; then
-	echo "Don't run this script from the command line." >&2
-	echo " (if you want, you could supply GIT_DIR then run" >&2
-	echo "  $0 <ref> <oldrev> <newrev>)" >&2
-	exit 1
-fi
-
-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
-	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
-	exit 1
-fi
-
-# --- Config
-allowunannotated=$(git config --bool hooks.allowunannotated)
-allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
-denycreatebranch=$(git config --bool hooks.denycreatebranch)
-allowdeletetag=$(git config --bool hooks.allowdeletetag)
-allowmodifytag=$(git config --bool hooks.allowmodifytag)
-
-# check for no description
-projectdesc=$(sed -e '1q' "$GIT_DIR/description")
-case "$projectdesc" in
-"Unnamed repository"* | "")
-	echo "*** Project description file hasn't been set" >&2
-	exit 1
-	;;
-esac
-
-# --- Check types
-# if $newrev is 0000...0000, it's a commit to delete a ref.
-zero="0000000000000000000000000000000000000000"
-if [ "$newrev" = "$zero" ]; then
-	newrev_type=delete
-else
-	newrev_type=$(git cat-file -t $newrev)
-fi
-
-case "$refname","$newrev_type" in
-	refs/tags/*,commit)
-		# un-annotated tag
-		short_refname=${refname##refs/tags/}
-		if [ "$allowunannotated" != "true" ]; then
-			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
-			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
-			exit 1
-		fi
-		;;
-	refs/tags/*,delete)
-		# delete tag
-		if [ "$allowdeletetag" != "true" ]; then
-			echo "*** Deleting a tag is not allowed in this repository" >&2
-			exit 1
-		fi
-		;;
-	refs/tags/*,tag)
-		# annotated tag
-		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
-		then
-			echo "*** Tag '$refname' already exists." >&2
-			echo "*** Modifying a tag is not allowed in this repository." >&2
-			exit 1
-		fi
-		;;
-	refs/heads/*,commit)
-		# branch
-		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
-			echo "*** Creating a branch is not allowed in this repository" >&2
-			exit 1
-		fi
-		;;
-	refs/heads/*,delete)
-		# delete branch
-		if [ "$allowdeletebranch" != "true" ]; then
-			echo "*** Deleting a branch is not allowed in this repository" >&2
-			exit 1
-		fi
-		;;
-	refs/remotes/*,commit)
-		# tracking branch
-		;;
-	refs/remotes/*,delete)
-		# delete tracking branch
-		if [ "$allowdeletebranch" != "true" ]; then
-			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
-			exit 1
-		fi
-		;;
-	*)
-		# Anything else (is there anything else?)
-		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
-		exit 1
-		;;
-esac
-
-# --- Finished
-exit 0
diff --git a/.git/index b/.git/index
deleted file mode 100644
Binary files a/.git/index and /dev/null differ
diff --git a/.git/info/exclude b/.git/info/exclude
deleted file mode 100644
--- a/.git/info/exclude
+++ /dev/null
@@ -1,6 +0,0 @@
-# git ls-files --others --exclude-from=.git/info/exclude
-# Lines that start with '#' are comments.
-# For a project mostly in C, the following would be a good set of
-# exclude patterns (uncomment them if you want to use them):
-# *.[oa]
-# *~
diff --git a/.git/logs/HEAD b/.git/logs/HEAD
deleted file mode 100644
--- a/.git/logs/HEAD
+++ /dev/null
@@ -1,10 +0,0 @@
-0000000000000000000000000000000000000000 6a35d077429c47159fd674466174acd97eb207b8 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424579505 +0800	clone: from https://github.com/HaskellZhangSong/TemplateHaskellUtils.git
-6a35d077429c47159fd674466174acd97eb207b8 1d5ed8a5bd5a630d659dac826f1d251b60317469 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424584157 +0800	commit: updated some basic functions
-1d5ed8a5bd5a630d659dac826f1d251b60317469 d1247d5c2308a73ca68c144ce67b060d3023b385 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424584417 +0800	commit: update readme
-d1247d5c2308a73ca68c144ce67b060d3023b385 be3fb7a2051f825f8d2a8b3d299a604abf2b5244 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424586988 +0800	commit: changed readme
-be3fb7a2051f825f8d2a8b3d299a604abf2b5244 084a706a37d6164dfb1fab5dcd4e098bcdfe0ffa HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424587127 +0800	commit: update me
-084a706a37d6164dfb1fab5dcd4e098bcdfe0ffa 9d75ddda94952b2353bcb98b30ffa96708137edb HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424591499 +0800	commit: delete somefiles
-9d75ddda94952b2353bcb98b30ffa96708137edb 3bc5e4c57a4d26371071febf2c9201f648327754 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424591528 +0800	commit: update on some functions
-3bc5e4c57a4d26371071febf2c9201f648327754 9f2a3202024981da42b4521ac1ade80ad3d7b546 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424932625 +0800	commit: add some functions
-9f2a3202024981da42b4521ac1ade80ad3d7b546 5f1699dd4e3d55b4caa1e57011c3532da41e3399 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424945343 +0800	commit: added print functions
-5f1699dd4e3d55b4caa1e57011c3532da41e3399 01a44973c56cb3b89b9b94d32e0674fb4139b519 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424945392 +0800	commit: cabal file update
diff --git a/.git/logs/refs/heads/master b/.git/logs/refs/heads/master
deleted file mode 100644
--- a/.git/logs/refs/heads/master
+++ /dev/null
@@ -1,10 +0,0 @@
-0000000000000000000000000000000000000000 6a35d077429c47159fd674466174acd97eb207b8 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424579505 +0800	clone: from https://github.com/HaskellZhangSong/TemplateHaskellUtils.git
-6a35d077429c47159fd674466174acd97eb207b8 1d5ed8a5bd5a630d659dac826f1d251b60317469 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424584157 +0800	commit: updated some basic functions
-1d5ed8a5bd5a630d659dac826f1d251b60317469 d1247d5c2308a73ca68c144ce67b060d3023b385 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424584417 +0800	commit: update readme
-d1247d5c2308a73ca68c144ce67b060d3023b385 be3fb7a2051f825f8d2a8b3d299a604abf2b5244 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424586988 +0800	commit: changed readme
-be3fb7a2051f825f8d2a8b3d299a604abf2b5244 084a706a37d6164dfb1fab5dcd4e098bcdfe0ffa HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424587127 +0800	commit: update me
-084a706a37d6164dfb1fab5dcd4e098bcdfe0ffa 9d75ddda94952b2353bcb98b30ffa96708137edb HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424591499 +0800	commit: delete somefiles
-9d75ddda94952b2353bcb98b30ffa96708137edb 3bc5e4c57a4d26371071febf2c9201f648327754 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424591528 +0800	commit: update on some functions
-3bc5e4c57a4d26371071febf2c9201f648327754 9f2a3202024981da42b4521ac1ade80ad3d7b546 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424932625 +0800	commit: add some functions
-9f2a3202024981da42b4521ac1ade80ad3d7b546 5f1699dd4e3d55b4caa1e57011c3532da41e3399 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424945343 +0800	commit: added print functions
-5f1699dd4e3d55b4caa1e57011c3532da41e3399 01a44973c56cb3b89b9b94d32e0674fb4139b519 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424945392 +0800	commit: cabal file update
diff --git a/.git/logs/refs/remotes/origin/HEAD b/.git/logs/refs/remotes/origin/HEAD
deleted file mode 100644
--- a/.git/logs/refs/remotes/origin/HEAD
+++ /dev/null
@@ -1,1 +0,0 @@
-0000000000000000000000000000000000000000 6a35d077429c47159fd674466174acd97eb207b8 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424579505 +0800	clone: from https://github.com/HaskellZhangSong/TemplateHaskellUtils.git
diff --git a/.git/logs/refs/remotes/origin/master b/.git/logs/refs/remotes/origin/master
deleted file mode 100644
--- a/.git/logs/refs/remotes/origin/master
+++ /dev/null
@@ -1,7 +0,0 @@
-6a35d077429c47159fd674466174acd97eb207b8 1d5ed8a5bd5a630d659dac826f1d251b60317469 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424584206 +0800	update by push
-1d5ed8a5bd5a630d659dac826f1d251b60317469 d1247d5c2308a73ca68c144ce67b060d3023b385 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424584455 +0800	update by push
-d1247d5c2308a73ca68c144ce67b060d3023b385 be3fb7a2051f825f8d2a8b3d299a604abf2b5244 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424587031 +0800	update by push
-be3fb7a2051f825f8d2a8b3d299a604abf2b5244 084a706a37d6164dfb1fab5dcd4e098bcdfe0ffa HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424587175 +0800	update by push
-084a706a37d6164dfb1fab5dcd4e098bcdfe0ffa 3bc5e4c57a4d26371071febf2c9201f648327754 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424591608 +0800	update by push
-3bc5e4c57a4d26371071febf2c9201f648327754 9f2a3202024981da42b4521ac1ade80ad3d7b546 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424932730 +0800	update by push
-9f2a3202024981da42b4521ac1ade80ad3d7b546 01a44973c56cb3b89b9b94d32e0674fb4139b519 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424945432 +0800	update by push
diff --git a/.git/objects/01/a44973c56cb3b89b9b94d32e0674fb4139b519 b/.git/objects/01/a44973c56cb3b89b9b94d32e0674fb4139b519
deleted file mode 100644
--- a/.git/objects/01/a44973c56cb3b89b9b94d32e0674fb4139b519
+++ /dev/null
@@ -1,3 +0,0 @@
-x­Î=Â0@aæÂ;R7qÁBìllnâÐ´©J¸??â¬ßðôB¦±BÛùM]U	GV
-Øc×³M¼SÞÒNuESrÈfUç
-°cÑ«D½"¨´³Ák£xTç<ëPV8Ëã®9_o2ßàðæKÍÇNC©¹	e:úÖ³'Ç-líÞZóÖ÷rÕ¿ÄL^2¤1+<(UÍIVB
diff --git a/.git/objects/04/4d92ff41144323a5f3560042b11cd4c1ba5e27 b/.git/objects/04/4d92ff41144323a5f3560042b11cd4c1ba5e27
deleted file mode 100644
Binary files a/.git/objects/04/4d92ff41144323a5f3560042b11cd4c1ba5e27 and /dev/null differ
diff --git a/.git/objects/06/14f36be9b51319da5697bdeb915abdeef87598 b/.git/objects/06/14f36be9b51319da5697bdeb915abdeef87598
deleted file mode 100644
Binary files a/.git/objects/06/14f36be9b51319da5697bdeb915abdeef87598 and /dev/null differ
diff --git a/.git/objects/07/0c1131e874660cd0b399ef47d1b858ff8793a0 b/.git/objects/07/0c1131e874660cd0b399ef47d1b858ff8793a0
deleted file mode 100644
Binary files a/.git/objects/07/0c1131e874660cd0b399ef47d1b858ff8793a0 and /dev/null differ
diff --git a/.git/objects/08/2597fc126f447143f810f32ce83938409c4055 b/.git/objects/08/2597fc126f447143f810f32ce83938409c4055
deleted file mode 100644
Binary files a/.git/objects/08/2597fc126f447143f810f32ce83938409c4055 and /dev/null differ
diff --git a/.git/objects/08/4a706a37d6164dfb1fab5dcd4e098bcdfe0ffa b/.git/objects/08/4a706a37d6164dfb1fab5dcd4e098bcdfe0ffa
deleted file mode 100644
--- a/.git/objects/08/4a706a37d6164dfb1fab5dcd4e098bcdfe0ffa
+++ /dev/null
@@ -1,2 +0,0 @@
-x­ÎË
-Â0a×yìL®îÝ¹+6M©éû[ÅGpûñs8·ZÊ£Ip~×"ú^¢àMðÚ³æ}và8f´ ÙÌ.Ld8å4ÇoÉÐ÷èÅÄX+pmC]ä_OÇëÓýR§»<ü¤ûR÷±ÓP[ÁÇØÝj9JmÁº4¹WQ)±év¹Ñ_ÆÄ:gl$7AxSI
diff --git a/.git/objects/0a/5c8b86bc82d2e802c87753d0d281666fb1d2cf b/.git/objects/0a/5c8b86bc82d2e802c87753d0d281666fb1d2cf
deleted file mode 100644
Binary files a/.git/objects/0a/5c8b86bc82d2e802c87753d0d281666fb1d2cf and /dev/null differ
diff --git a/.git/objects/0e/b705ecf8acd3e0faadbf5b8f9223c3f2af7d2f b/.git/objects/0e/b705ecf8acd3e0faadbf5b8f9223c3f2af7d2f
deleted file mode 100644
Binary files a/.git/objects/0e/b705ecf8acd3e0faadbf5b8f9223c3f2af7d2f and /dev/null differ
diff --git a/.git/objects/11/85ce856677a3fab9b4b8152e7188867948cead b/.git/objects/11/85ce856677a3fab9b4b8152e7188867948cead
deleted file mode 100644
Binary files a/.git/objects/11/85ce856677a3fab9b4b8152e7188867948cead and /dev/null differ
diff --git a/.git/objects/11/9bdac5caf8dccdce98352d29af74517692984c b/.git/objects/11/9bdac5caf8dccdce98352d29af74517692984c
deleted file mode 100644
Binary files a/.git/objects/11/9bdac5caf8dccdce98352d29af74517692984c and /dev/null differ
diff --git a/.git/objects/14/cc1d44e537fa8f1f5f188c77de2de18c399dd8 b/.git/objects/14/cc1d44e537fa8f1f5f188c77de2de18c399dd8
deleted file mode 100644
Binary files a/.git/objects/14/cc1d44e537fa8f1f5f188c77de2de18c399dd8 and /dev/null differ
diff --git a/.git/objects/17/a8b7d220ae5394a9369c889384673567f2ffe2 b/.git/objects/17/a8b7d220ae5394a9369c889384673567f2ffe2
deleted file mode 100644
Binary files a/.git/objects/17/a8b7d220ae5394a9369c889384673567f2ffe2 and /dev/null differ
diff --git a/.git/objects/1b/fe09ade13ffc3e9646506a8bd07d9f06282ca8 b/.git/objects/1b/fe09ade13ffc3e9646506a8bd07d9f06282ca8
deleted file mode 100644
--- a/.git/objects/1b/fe09ade13ffc3e9646506a8bd07d9f06282ca8
+++ /dev/null
@@ -1,3 +0,0 @@
-xmSMoÔ0åÚHþsF³[D+mE­Ôr`7'Äù~=ãl²¾Åoæù½Ú¸n?¼SðhuÔÂ@Ä~0"b©DøÆ)jÃQÖ¡EOzÃ¦6ðÕy`Ñ´ÉG¤kR6¨½*Æá®ªf^î|WMU
-èCÙ%-±b+¬èñ^ÿêbÅoj¥.ËW|ÍW|Å0Z7.àë²+2Z¾ÃÃÁ4gÄÐx=dù§î©µM¶É×¢zÝ©5Ql?
--.åïñâDwé0Ï&Ðp:UªyãújòS	Ûííªý¼øA+nÐK6x~Ü²Õæ?=~Þ~ÛmY!RTÎ¬MãôÎ_Å^hZ¦m,³ñ,é£rJ)®¶ß¸aôygm2Ó9?ßÂùJ4VÔIYÆq8ÉØiÊ!ø½(K¾ÁÉJ^æ÷í§/Ï[ÞËÌMÉ,_Åà~³ækÚBíY/(ËÞÉdhòåt)|±¸àÓx®®æ\Lùv9Ý'x`ZHÎÇd7c´òÅZP>6wü-Àõ1(Ëo÷¸á·¹[Å¾Ô~i¾ÉÄV$K3szrvq³Z¯þÝ)k
diff --git a/.git/objects/1d/5ed8a5bd5a630d659dac826f1d251b60317469 b/.git/objects/1d/5ed8a5bd5a630d659dac826f1d251b60317469
deleted file mode 100644
Binary files a/.git/objects/1d/5ed8a5bd5a630d659dac826f1d251b60317469 and /dev/null differ
diff --git a/.git/objects/1d/c0ca8607b48e6eb1ef35d1a875020bad45711b b/.git/objects/1d/c0ca8607b48e6eb1ef35d1a875020bad45711b
deleted file mode 100644
Binary files a/.git/objects/1d/c0ca8607b48e6eb1ef35d1a875020bad45711b and /dev/null differ
diff --git a/.git/objects/1e/427715ecf5a13ab5e0dd5148343b3c5c85ede3 b/.git/objects/1e/427715ecf5a13ab5e0dd5148343b3c5c85ede3
deleted file mode 100644
Binary files a/.git/objects/1e/427715ecf5a13ab5e0dd5148343b3c5c85ede3 and /dev/null differ
diff --git a/.git/objects/1f/09cdb8471418bfb9d426a81124fc05387864de b/.git/objects/1f/09cdb8471418bfb9d426a81124fc05387864de
deleted file mode 100644
Binary files a/.git/objects/1f/09cdb8471418bfb9d426a81124fc05387864de and /dev/null differ
diff --git a/.git/objects/20/ca248c4d12a9cc5a4441bfb342b60922824040 b/.git/objects/20/ca248c4d12a9cc5a4441bfb342b60922824040
deleted file mode 100644
Binary files a/.git/objects/20/ca248c4d12a9cc5a4441bfb342b60922824040 and /dev/null differ
diff --git a/.git/objects/22/06167d3bd9beff796b124fc62b10cf920ddedc b/.git/objects/22/06167d3bd9beff796b124fc62b10cf920ddedc
deleted file mode 100644
--- a/.git/objects/22/06167d3bd9beff796b124fc62b10cf920ddedc
+++ /dev/null
@@ -1,1 +0,0 @@
-xuÎAK1`ÏùzQÜ=´ÒKÐ«°8éNÈL´þxm5Ìyã;<l·7+ttÁ*í­|Po:1YhÈC¼<	N9C_iT^j¸ôàù>èdIbÊk[|ã)Æ0Ã"¢à¡¬ÄD"ÅF{×`Ý`s¨|IXc³Tm/§Ý}ù_hQ+°ÎÊhÊ^955|RRô¶+qÑ-ü¯ýÌS·à])õeúÃÿ;\=æLùÒ\W±ÝnÓ
diff --git a/.git/objects/25/e665418344ac3e22647b09133c46f11764adc7 b/.git/objects/25/e665418344ac3e22647b09133c46f11764adc7
deleted file mode 100644
Binary files a/.git/objects/25/e665418344ac3e22647b09133c46f11764adc7 and /dev/null differ
diff --git a/.git/objects/26/b3e7dc8604f16cd517c71a150db8e193d71710 b/.git/objects/26/b3e7dc8604f16cd517c71a150db8e193d71710
deleted file mode 100644
Binary files a/.git/objects/26/b3e7dc8604f16cd517c71a150db8e193d71710 and /dev/null differ
diff --git a/.git/objects/2f/04dee5ff3b9942714d4746b9d0a8c5d5509085 b/.git/objects/2f/04dee5ff3b9942714d4746b9d0a8c5d5509085
deleted file mode 100644
Binary files a/.git/objects/2f/04dee5ff3b9942714d4746b9d0a8c5d5509085 and /dev/null differ
diff --git a/.git/objects/35/d3e81042a51a696393d60d9e6091189c807d4f b/.git/objects/35/d3e81042a51a696393d60d9e6091189c807d4f
deleted file mode 100644
Binary files a/.git/objects/35/d3e81042a51a696393d60d9e6091189c807d4f and /dev/null differ
diff --git a/.git/objects/3b/c5e4c57a4d26371071febf2c9201f648327754 b/.git/objects/3b/c5e4c57a4d26371071febf2c9201f648327754
deleted file mode 100644
Binary files a/.git/objects/3b/c5e4c57a4d26371071febf2c9201f648327754 and /dev/null differ
diff --git a/.git/objects/40/e84137de681e2b3710c60e78cca1b541967f6b b/.git/objects/40/e84137de681e2b3710c60e78cca1b541967f6b
deleted file mode 100644
Binary files a/.git/objects/40/e84137de681e2b3710c60e78cca1b541967f6b and /dev/null differ
diff --git a/.git/objects/42/905a03530679e07e9aeb8c52f5fe1219207e01 b/.git/objects/42/905a03530679e07e9aeb8c52f5fe1219207e01
deleted file mode 100644
Binary files a/.git/objects/42/905a03530679e07e9aeb8c52f5fe1219207e01 and /dev/null differ
diff --git a/.git/objects/45/ff6c45a9cb2bee78bb34a530229037cfac04dd b/.git/objects/45/ff6c45a9cb2bee78bb34a530229037cfac04dd
deleted file mode 100644
Binary files a/.git/objects/45/ff6c45a9cb2bee78bb34a530229037cfac04dd and /dev/null differ
diff --git a/.git/objects/48/c8e4a7b86032067949768c343e0673410a676c b/.git/objects/48/c8e4a7b86032067949768c343e0673410a676c
deleted file mode 100644
Binary files a/.git/objects/48/c8e4a7b86032067949768c343e0673410a676c and /dev/null differ
diff --git a/.git/objects/4a/96e90bdb920aa512ecdbdaa5f8d901f67e4a9a b/.git/objects/4a/96e90bdb920aa512ecdbdaa5f8d901f67e4a9a
deleted file mode 100644
Binary files a/.git/objects/4a/96e90bdb920aa512ecdbdaa5f8d901f67e4a9a and /dev/null differ
diff --git a/.git/objects/4e/5006d92e85b87d8f4d74bcc32eb6533505ce5e b/.git/objects/4e/5006d92e85b87d8f4d74bcc32eb6533505ce5e
deleted file mode 100644
Binary files a/.git/objects/4e/5006d92e85b87d8f4d74bcc32eb6533505ce5e and /dev/null differ
diff --git a/.git/objects/5c/bb9a4d1c9a35dcb29eb3866afb1e33e0c304c9 b/.git/objects/5c/bb9a4d1c9a35dcb29eb3866afb1e33e0c304c9
deleted file mode 100644
Binary files a/.git/objects/5c/bb9a4d1c9a35dcb29eb3866afb1e33e0c304c9 and /dev/null differ
diff --git a/.git/objects/5f/1699dd4e3d55b4caa1e57011c3532da41e3399 b/.git/objects/5f/1699dd4e3d55b4caa1e57011c3532da41e3399
deleted file mode 100644
Binary files a/.git/objects/5f/1699dd4e3d55b4caa1e57011c3532da41e3399 and /dev/null differ
diff --git a/.git/objects/60/f79d207a4fdc123ed588c5e07108374dc4c596 b/.git/objects/60/f79d207a4fdc123ed588c5e07108374dc4c596
deleted file mode 100644
Binary files a/.git/objects/60/f79d207a4fdc123ed588c5e07108374dc4c596 and /dev/null differ
diff --git a/.git/objects/62/4eb04567b70087227deed14cc2935aa0ff6446 b/.git/objects/62/4eb04567b70087227deed14cc2935aa0ff6446
deleted file mode 100644
Binary files a/.git/objects/62/4eb04567b70087227deed14cc2935aa0ff6446 and /dev/null differ
diff --git a/.git/objects/64/73929c7950d01d618a45420165c543b8cb4ff2 b/.git/objects/64/73929c7950d01d618a45420165c543b8cb4ff2
deleted file mode 100644
Binary files a/.git/objects/64/73929c7950d01d618a45420165c543b8cb4ff2 and /dev/null differ
diff --git a/.git/objects/68/c829d10241779b0f24a4fb2da9c5eb4d41942c b/.git/objects/68/c829d10241779b0f24a4fb2da9c5eb4d41942c
deleted file mode 100644
Binary files a/.git/objects/68/c829d10241779b0f24a4fb2da9c5eb4d41942c and /dev/null differ
diff --git a/.git/objects/6a/35d077429c47159fd674466174acd97eb207b8 b/.git/objects/6a/35d077429c47159fd674466174acd97eb207b8
deleted file mode 100644
--- a/.git/objects/6a/35d077429c47159fd674466174acd97eb207b8
+++ /dev/null
@@ -1,2 +0,0 @@
-x­Î±Â agâî&¸ÒÄGÝÜn)¤ÅÅ§£àúäÏq%çXAIÜÕÕ{°!=^9;ÚNi=ÜI´©î5Î´Í>¥[ eºeÃOøëC|kv
-¥f» µÒ]?H4°VÖ´]¨þ/1vYbà[eoï¸G
diff --git a/.git/objects/71/2891fcdda0381f84adb48cac21c035028d3a8c b/.git/objects/71/2891fcdda0381f84adb48cac21c035028d3a8c
deleted file mode 100644
Binary files a/.git/objects/71/2891fcdda0381f84adb48cac21c035028d3a8c and /dev/null differ
diff --git a/.git/objects/74/a4e672ebf4b930e5dd6b616fa4bc2a02365466 b/.git/objects/74/a4e672ebf4b930e5dd6b616fa4bc2a02365466
deleted file mode 100644
Binary files a/.git/objects/74/a4e672ebf4b930e5dd6b616fa4bc2a02365466 and /dev/null differ
diff --git a/.git/objects/78/3415d3261400ad2ad430037813a214e5742735 b/.git/objects/78/3415d3261400ad2ad430037813a214e5742735
deleted file mode 100644
Binary files a/.git/objects/78/3415d3261400ad2ad430037813a214e5742735 and /dev/null differ
diff --git a/.git/objects/7a/0cc2115b5d2bdce511903df0ae592ab1ab8c21 b/.git/objects/7a/0cc2115b5d2bdce511903df0ae592ab1ab8c21
deleted file mode 100644
Binary files a/.git/objects/7a/0cc2115b5d2bdce511903df0ae592ab1ab8c21 and /dev/null differ
diff --git a/.git/objects/7f/01dc145616f4a53e0a186872830e49bff62efb b/.git/objects/7f/01dc145616f4a53e0a186872830e49bff62efb
deleted file mode 100644
--- a/.git/objects/7f/01dc145616f4a53e0a186872830e49bff62efb
+++ /dev/null
@@ -1,3 +0,0 @@
-x½MoÚ0wæW¼bRUªÆ%0ÓÚÒF¤õ4	à!¤ÒúãûÚñXñ©§HñÄOÞ/ÏE>(Ð/w7ðÀ$ÂÓãxú¦Ùj¯+Á¯ì­È7¬X¥L,ùïXÁ0?Àw6gnîZ-|dé-9ÌÙ=PµöuÁ_W[/O¿ÇÉd¦Ö¡möqùçx2«"×ö'ßÑ[}n7«m¾ëÀõïYêÀ@Þß¡vs4ÂWW4_¦ð±¸|¬üÒÃÂNM¬à)P=ÈØ~Í"2DÉÐ&ùÚ¶7qOùÈ¦5å)Úå<Àÿt	%Ýªë4I~C¦hk¦®xByºum»î6Ýèe
-ÝhÃ­[V»¥Rfû: ÷gí4írøiÎSÐºu³SúeæÒÍ°)ÃACñ¾¢¸LS,È¾#zH¨DÄ!§_QömfõÒE³~C¬»e1¸Ä2ÓK,ó³öÓ6þÇÌ²:bÍ5ÅäzyYn =£÷Y[,òtmö!4ê sÄÑ~ÍZs¹ÞcUý¼=Îj43&åAµ!ém1Ò-)§$¾ÌSÑ³ÅXÄiiN^¥Åd2BÒÏëI,DE¸Ô¤o¶Ö6nÇr8¨cªÃûz<dû4ÂùàvÓÌe=yîSs¿í0A£ÚY¦6¹ñ?hJehºh@OO¿ÅY"y¢éß±
-Õ	î:À¬
diff --git a/.git/objects/80/0d936c649cb85b2c545007389fdd4a161b8241 b/.git/objects/80/0d936c649cb85b2c545007389fdd4a161b8241
deleted file mode 100644
Binary files a/.git/objects/80/0d936c649cb85b2c545007389fdd4a161b8241 and /dev/null differ
diff --git a/.git/objects/83/0ac91299ed1575b3936ea9e541fedc2c38399e b/.git/objects/83/0ac91299ed1575b3936ea9e541fedc2c38399e
deleted file mode 100644
Binary files a/.git/objects/83/0ac91299ed1575b3936ea9e541fedc2c38399e and /dev/null differ
diff --git a/.git/objects/83/3b4c60194337adacadea6fed3c2405dddc2bed b/.git/objects/83/3b4c60194337adacadea6fed3c2405dddc2bed
deleted file mode 100644
Binary files a/.git/objects/83/3b4c60194337adacadea6fed3c2405dddc2bed and /dev/null differ
diff --git a/.git/objects/83/775c596675f20802bddca97764740eed061457 b/.git/objects/83/775c596675f20802bddca97764740eed061457
deleted file mode 100644
Binary files a/.git/objects/83/775c596675f20802bddca97764740eed061457 and /dev/null differ
diff --git a/.git/objects/85/e0f51a55237cca950296b39f063057a52e85f6 b/.git/objects/85/e0f51a55237cca950296b39f063057a52e85f6
deleted file mode 100644
Binary files a/.git/objects/85/e0f51a55237cca950296b39f063057a52e85f6 and /dev/null differ
diff --git a/.git/objects/8c/36a3364b672c8b85244909acf3a06a3501ad33 b/.git/objects/8c/36a3364b672c8b85244909acf3a06a3501ad33
deleted file mode 100644
Binary files a/.git/objects/8c/36a3364b672c8b85244909acf3a06a3501ad33 and /dev/null differ
diff --git a/.git/objects/8e/2c733e2d82de61adc4fb9ea405eea6adde0477 b/.git/objects/8e/2c733e2d82de61adc4fb9ea405eea6adde0477
deleted file mode 100644
Binary files a/.git/objects/8e/2c733e2d82de61adc4fb9ea405eea6adde0477 and /dev/null differ
diff --git a/.git/objects/94/992aa0ad781e24a35f65e071057a2aa7bef45d b/.git/objects/94/992aa0ad781e24a35f65e071057a2aa7bef45d
deleted file mode 100644
Binary files a/.git/objects/94/992aa0ad781e24a35f65e071057a2aa7bef45d and /dev/null differ
diff --git a/.git/objects/95/1c9d9e5c1b16b90f9f43e97c5e6ee8daeff319 b/.git/objects/95/1c9d9e5c1b16b90f9f43e97c5e6ee8daeff319
deleted file mode 100644
Binary files a/.git/objects/95/1c9d9e5c1b16b90f9f43e97c5e6ee8daeff319 and /dev/null differ
diff --git a/.git/objects/98/b8bcf2f60d6e4d17e63fd4a4802182ad732501 b/.git/objects/98/b8bcf2f60d6e4d17e63fd4a4802182ad732501
deleted file mode 100644
Binary files a/.git/objects/98/b8bcf2f60d6e4d17e63fd4a4802182ad732501 and /dev/null differ
diff --git a/.git/objects/9b/2c7a465fcbdaddb77e0203ea65b458b7c6df31 b/.git/objects/9b/2c7a465fcbdaddb77e0203ea65b458b7c6df31
deleted file mode 100644
Binary files a/.git/objects/9b/2c7a465fcbdaddb77e0203ea65b458b7c6df31 and /dev/null differ
diff --git a/.git/objects/9d/75ddda94952b2353bcb98b30ffa96708137edb b/.git/objects/9d/75ddda94952b2353bcb98b30ffa96708137edb
deleted file mode 100644
Binary files a/.git/objects/9d/75ddda94952b2353bcb98b30ffa96708137edb and /dev/null differ
diff --git a/.git/objects/9e/43c01c01365d6d757188b2136789f5726dfac3 b/.git/objects/9e/43c01c01365d6d757188b2136789f5726dfac3
deleted file mode 100644
Binary files a/.git/objects/9e/43c01c01365d6d757188b2136789f5726dfac3 and /dev/null differ
diff --git a/.git/objects/9f/2a3202024981da42b4521ac1ade80ad3d7b546 b/.git/objects/9f/2a3202024981da42b4521ac1ade80ad3d7b546
deleted file mode 100644
--- a/.git/objects/9f/2a3202024981da42b4521ac1ade80ad3d7b546
+++ /dev/null
@@ -1,2 +0,0 @@
-x­Î=NÄ0@ajbz¤h<þVnÖo"b%Þû³ @ûO/Ö¶	äÝÓ<DÀ¸b$j´ÄN³OÞ$S<$Ö1å¡Øª¾ø>Á\³]`[È 1è*×J9êêm4³ïs¼ñù)ûþ±r¿½~Ë,¿´üØë:fãm_òh/ -ÙdÈgê¡å)ÿS\
-£	Ô{ÏsýTß£ôTè
diff --git a/.git/objects/a0/255b994096ec2c541e7257cfc164aa5794c09c b/.git/objects/a0/255b994096ec2c541e7257cfc164aa5794c09c
deleted file mode 100644
Binary files a/.git/objects/a0/255b994096ec2c541e7257cfc164aa5794c09c and /dev/null differ
diff --git a/.git/objects/a0/6307868bc41484fbaf1e60913612fa07e47aca b/.git/objects/a0/6307868bc41484fbaf1e60913612fa07e47aca
deleted file mode 100644
Binary files a/.git/objects/a0/6307868bc41484fbaf1e60913612fa07e47aca and /dev/null differ
diff --git a/.git/objects/a6/c5ae05a815bab01ab73604faea7d1edfeb91a9 b/.git/objects/a6/c5ae05a815bab01ab73604faea7d1edfeb91a9
deleted file mode 100644
Binary files a/.git/objects/a6/c5ae05a815bab01ab73604faea7d1edfeb91a9 and /dev/null differ
diff --git a/.git/objects/ac/b473308a531cdd76f5e9f7e643a047a71fafd1 b/.git/objects/ac/b473308a531cdd76f5e9f7e643a047a71fafd1
deleted file mode 100644
Binary files a/.git/objects/ac/b473308a531cdd76f5e9f7e643a047a71fafd1 and /dev/null differ
diff --git a/.git/objects/ad/fc307073786c3dea4d06fcc1733e77bb383c81 b/.git/objects/ad/fc307073786c3dea4d06fcc1733e77bb383c81
deleted file mode 100644
Binary files a/.git/objects/ad/fc307073786c3dea4d06fcc1733e77bb383c81 and /dev/null differ
diff --git a/.git/objects/b5/b6ac12670f8ee43b1759402b346d9da60ab066 b/.git/objects/b5/b6ac12670f8ee43b1759402b346d9da60ab066
deleted file mode 100644
--- a/.git/objects/b5/b6ac12670f8ee43b1759402b346d9da60ab066
+++ /dev/null
@@ -1,1 +0,0 @@
-x+)JMU07g040031Q(N-)-ÐË(fÐg¹÷ô¿õL§B_w·V½0¡EMYjQqf~CÌîY¾2³Lïl·¹-ë·ñÃ,'>7"v
diff --git a/.git/objects/b9/913ee76376fa16f1fbd6d525f8da421f33df57 b/.git/objects/b9/913ee76376fa16f1fbd6d525f8da421f33df57
deleted file mode 100644
Binary files a/.git/objects/b9/913ee76376fa16f1fbd6d525f8da421f33df57 and /dev/null differ
diff --git a/.git/objects/be/3fb7a2051f825f8d2a8b3d299a604abf2b5244 b/.git/objects/be/3fb7a2051f825f8d2a8b3d299a604abf2b5244
deleted file mode 100644
--- a/.git/objects/be/3fb7a2051f825f8d2a8b3d299a604abf2b5244
+++ /dev/null
@@ -1,1 +0,0 @@
-x­Î»NAaêyéVö\)B)ééè¼¶ÉFìì Íðþl@wôG¿ôÖnÃOc7;Æ­ªPôE4ct&ÃSÔÁ}ñnÛð!UÍ"×(\H0%±Rg( B#eÇßcé»åû§­ëûÂÛõ­oWþé¦]>ßÖIz{ñBÊTNDþÀz$û3'S¿k3÷¿&SÒ
diff --git a/.git/objects/c3/c2f2418af9ac6f49318d05c4ab4a8bf3b398f7 b/.git/objects/c3/c2f2418af9ac6f49318d05c4ab4a8bf3b398f7
deleted file mode 100644
--- a/.git/objects/c3/c2f2418af9ac6f49318d05c4ab4a8bf3b398f7
+++ /dev/null
@@ -1,1 +0,0 @@
-x­R;OÃ0XXìØÎÃI'¤"¡[Ë¼ØNGuJq~=nkwHS^ì»ó÷¸³îÄSñ[n¿3e³ÕÜ@ñ~SjSkW¼ö·G Qú>O1DºµJ²³>äeø©x[Áe×V¯ª3¯5]ãØozÿRG­Ã!UÆlûYTµQØÝÝmG¬\®ðaìG<ãðva­¼*ýü~ïÐ»^åpÑ#^Þfì=3ëM9aEÝ&ZÎÅßùòÇ§·{&¾ry x_RûP¥QL(	!(JÎiò,ÅRHÊNíÿADH´Ò8CaHpF8	À­Ñ7çÒ~\üW.:Éi4;±·ûøÓY¨xaqçÀÎÿAðÝ~ÏË
diff --git a/.git/objects/c7/77470c4d808739af195139dafd6041ab19e708 b/.git/objects/c7/77470c4d808739af195139dafd6041ab19e708
deleted file mode 100644
Binary files a/.git/objects/c7/77470c4d808739af195139dafd6041ab19e708 and /dev/null differ
diff --git a/.git/objects/c9/b3cf02a7c8a4f0c7c556583944579408b3bb74 b/.git/objects/c9/b3cf02a7c8a4f0c7c556583944579408b3bb74
deleted file mode 100644
Binary files a/.git/objects/c9/b3cf02a7c8a4f0c7c556583944579408b3bb74 and /dev/null differ
diff --git a/.git/objects/d1/247d5c2308a73ca68c144ce67b060d3023b385 b/.git/objects/d1/247d5c2308a73ca68c144ce67b060d3023b385
deleted file mode 100644
--- a/.git/objects/d1/247d5c2308a73ca68c144ce67b060d3023b385
+++ /dev/null
@@ -1,2 +0,0 @@
-x­Î½0@aç>ÅÝMH[úGb£»Û¥÷FJI-ï/ÁõNNÌ)=*h'µ0C`}Û²¦ Bfè;F#-3:$bi¼+^*(²LmO]+ÉÙ0íEÚªÞÉVyã:[r+¾<Ï÷	ñN?i¾Ô|ì2åð171§3(£Æ(G¤»îËÿÛJX
-#%oó¥U4
diff --git a/.git/objects/d1/f000c134b3b213d6a4be1bd79e2ae3bd7fe8de b/.git/objects/d1/f000c134b3b213d6a4be1bd79e2ae3bd7fe8de
deleted file mode 100644
Binary files a/.git/objects/d1/f000c134b3b213d6a4be1bd79e2ae3bd7fe8de and /dev/null differ
diff --git a/.git/objects/dc/3e4f86c7ead198e6595395057c6836d0e5c0c4 b/.git/objects/dc/3e4f86c7ead198e6595395057c6836d0e5c0c4
deleted file mode 100644
Binary files a/.git/objects/dc/3e4f86c7ead198e6595395057c6836d0e5c0c4 and /dev/null differ
diff --git a/.git/objects/eb/cdb92439913cc476708cc8ec7920219062a79a b/.git/objects/eb/cdb92439913cc476708cc8ec7920219062a79a
deleted file mode 100644
--- a/.git/objects/eb/cdb92439913cc476708cc8ec7920219062a79a
+++ /dev/null
@@ -1,1 +0,0 @@
-xuÎÁJÄ0`¯æ)~ð¢ØvE="W¡Ê8b¶2ÝoR{pA!3ÿqnnïÎ.ÐÑ!«ôlåBxÕ1ÉBCòäuäI0pÂÌÊøL£taÍÁó#| ÐÑÄ´-¾ðcaFQðP~c"Â¢¿¼¾j°i°ÝW¹tØ`kPÏy¹6Æ§cÄn¾¼/{´÷¨9uTæO¢){åÔÔæ¢·\iÞÂÁà<uÞá_ªÕÿG)K¸ºÉ/ËçæýSû¾önæ
diff --git a/.git/objects/f4/e127a195ff2f05bd5913424e318a2b07cecb8f b/.git/objects/f4/e127a195ff2f05bd5913424e318a2b07cecb8f
deleted file mode 100644
Binary files a/.git/objects/f4/e127a195ff2f05bd5913424e318a2b07cecb8f and /dev/null differ
diff --git a/.git/objects/f7/1d9b249fecb00850d2ecfb07bae5ebbece36eb b/.git/objects/f7/1d9b249fecb00850d2ecfb07bae5ebbece36eb
deleted file mode 100644
Binary files a/.git/objects/f7/1d9b249fecb00850d2ecfb07bae5ebbece36eb and /dev/null differ
diff --git a/.git/packed-refs b/.git/packed-refs
deleted file mode 100644
--- a/.git/packed-refs
+++ /dev/null
@@ -1,2 +0,0 @@
-# pack-refs with: peeled fully-peeled 
-6a35d077429c47159fd674466174acd97eb207b8 refs/remotes/origin/master
diff --git a/.git/refs/heads/master b/.git/refs/heads/master
deleted file mode 100644
--- a/.git/refs/heads/master
+++ /dev/null
@@ -1,1 +0,0 @@
-01a44973c56cb3b89b9b94d32e0674fb4139b519
diff --git a/.git/refs/remotes/origin/HEAD b/.git/refs/remotes/origin/HEAD
deleted file mode 100644
--- a/.git/refs/remotes/origin/HEAD
+++ /dev/null
@@ -1,1 +0,0 @@
-ref: refs/remotes/origin/master
diff --git a/.git/refs/remotes/origin/master b/.git/refs/remotes/origin/master
deleted file mode 100644
--- a/.git/refs/remotes/origin/master
+++ /dev/null
@@ -1,1 +0,0 @@
-01a44973c56cb3b89b9b94d32e0674fb4139b519
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,24 @@
 useful functions for you to write template Haskell code
 
 some examples
+** Prettyprint
 
+    > runQ [| (1+1) * 5|] >>= pp -- or use
+    > printiQ  [| (1+1) * 5|]
+    InfixE (Just InfixE (Just LitE (IntegerL 1))
+                      (VarE (Name (OccName "+")
+                                   (NameG' VarName
+                                           (PkgName "base")
+                                           (ModName "GHC.Num"))))
+                       (Just LitE (IntegerL 1)))
+          (VarE (Name (OccName "*")
+                      (NameG' VarName
+                              (PkgName "base")
+                              (ModName "GHC.Num"))))
+          (Just LitE (IntegerL 5))
+
+** Other helper functions
+
     -- | Apply a list of expression [(+), 1, 2] to (+) 1 2
     appExp :: [ExpQ] -> ExpQ
 
@@ -11,3 +28,4 @@
 
     -- | convert [a, b, c] to a -> b -> c
     curryType :: [TypeQ] -> TypeQ
+
diff --git a/changelog.md b/changelog.md
new file mode 100644
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,1 @@
+@applyKinds@ is renamed to @applyKind@
diff --git a/dist/build/HStemplate-haskell-util-0.1.0.4.o b/dist/build/HStemplate-haskell-util-0.1.0.4.o
deleted file mode 100644
Binary files a/dist/build/HStemplate-haskell-util-0.1.0.4.o and /dev/null differ
diff --git a/dist/build/Language/Haskell/TH/Utils.hi b/dist/build/Language/Haskell/TH/Utils.hi
deleted file mode 100644
Binary files a/dist/build/Language/Haskell/TH/Utils.hi and /dev/null differ
diff --git a/dist/build/Language/Haskell/TH/Utils.o b/dist/build/Language/Haskell/TH/Utils.o
deleted file mode 100644
Binary files a/dist/build/Language/Haskell/TH/Utils.o and /dev/null differ
diff --git a/dist/build/autogen/Paths_template_haskell_util.hs b/dist/build/autogen/Paths_template_haskell_util.hs
deleted file mode 100644
--- a/dist/build/autogen/Paths_template_haskell_util.hs
+++ /dev/null
@@ -1,35 +0,0 @@
-module Paths_template_haskell_util (
-    version,
-    getBinDir, getLibDir, getDataDir, getLibexecDir,
-    getDataFileName, getSysconfDir
-  ) where
-
-import qualified Control.Exception as Exception
-import Data.Version (Version(..))
-import System.Environment (getEnv)
-import Prelude
-
-catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a
-catchIO = Exception.catch
-
-version :: Version
-version = Version [0,1,0,4] []
-bindir, libdir, datadir, libexecdir, sysconfdir :: FilePath
-
-bindir     = "C:\\Users\\Song\\AppData\\Roaming\\cabal\\bin"
-libdir     = "C:\\Users\\Song\\AppData\\Roaming\\cabal\\x86_64-windows-ghc-7.8.3\\template-haskell-util-0.1.0.4"
-datadir    = "C:\\Users\\Song\\AppData\\Roaming\\cabal\\x86_64-windows-ghc-7.8.3\\template-haskell-util-0.1.0.4"
-libexecdir = "C:\\Users\\Song\\AppData\\Roaming\\cabal\\template-haskell-util-0.1.0.4"
-sysconfdir = "C:\\Users\\Song\\AppData\\Roaming\\cabal\\etc"
-
-getBinDir, getLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath
-getBinDir = catchIO (getEnv "template_haskell_util_bindir") (\_ -> return bindir)
-getLibDir = catchIO (getEnv "template_haskell_util_libdir") (\_ -> return libdir)
-getDataDir = catchIO (getEnv "template_haskell_util_datadir") (\_ -> return datadir)
-getLibexecDir = catchIO (getEnv "template_haskell_util_libexecdir") (\_ -> return libexecdir)
-getSysconfDir = catchIO (getEnv "template_haskell_util_sysconfdir") (\_ -> return sysconfdir)
-
-getDataFileName :: FilePath -> IO FilePath
-getDataFileName name = do
-  dir <- getDataDir
-  return (dir ++ "\\" ++ name)
diff --git a/dist/build/autogen/cabal_macros.h b/dist/build/autogen/cabal_macros.h
deleted file mode 100644
--- a/dist/build/autogen/cabal_macros.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* DO NOT EDIT: This file is automatically generated by Cabal */
-
-/* package GenericPretty-1.2.1 */
-#define VERSION_GenericPretty "1.2.1"
-#define MIN_VERSION_GenericPretty(major1,major2,minor) (\
-  (major1) <  1 || \
-  (major1) == 1 && (major2) <  2 || \
-  (major1) == 1 && (major2) == 2 && (minor) <= 1)
-
-/* package base-4.7.0.1 */
-#define VERSION_base "4.7.0.1"
-#define MIN_VERSION_base(major1,major2,minor) (\
-  (major1) <  4 || \
-  (major1) == 4 && (major2) <  7 || \
-  (major1) == 4 && (major2) == 7 && (minor) <= 0)
-
-/* package ghc-prim-0.3.1.0 */
-#define VERSION_ghc_prim "0.3.1.0"
-#define MIN_VERSION_ghc_prim(major1,major2,minor) (\
-  (major1) <  0 || \
-  (major1) == 0 && (major2) <  3 || \
-  (major1) == 0 && (major2) == 3 && (minor) <= 1)
-
-/* package template-haskell-2.9.0.0 */
-#define VERSION_template_haskell "2.9.0.0"
-#define MIN_VERSION_template_haskell(major1,major2,minor) (\
-  (major1) <  2 || \
-  (major1) == 2 && (major2) <  9 || \
-  (major1) == 2 && (major2) == 9 && (minor) <= 0)
-
-/* tool alex-3.1.3 */
-#define TOOL_VERSION_alex "3.1.3"
-#define MIN_TOOL_VERSION_alex(major1,major2,minor) (\
-  (major1) <  3 || \
-  (major1) == 3 && (major2) <  1 || \
-  (major1) == 3 && (major2) == 1 && (minor) <= 3)
-
-/* tool cpphs-1.18.5 */
-#define TOOL_VERSION_cpphs "1.18.5"
-#define MIN_TOOL_VERSION_cpphs(major1,major2,minor) (\
-  (major1) <  1 || \
-  (major1) == 1 && (major2) <  18 || \
-  (major1) == 1 && (major2) == 18 && (minor) <= 5)
-
-/* tool gcc-4.6.3 */
-#define TOOL_VERSION_gcc "4.6.3"
-#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\
-  (major1) <  4 || \
-  (major1) == 4 && (major2) <  6 || \
-  (major1) == 4 && (major2) == 6 && (minor) <= 3)
-
-/* tool ghc-7.8.3 */
-#define TOOL_VERSION_ghc "7.8.3"
-#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\
-  (major1) <  7 || \
-  (major1) == 7 && (major2) <  8 || \
-  (major1) == 7 && (major2) == 8 && (minor) <= 3)
-
-/* tool ghc-pkg-7.8.3 */
-#define TOOL_VERSION_ghc_pkg "7.8.3"
-#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\
-  (major1) <  7 || \
-  (major1) == 7 && (major2) <  8 || \
-  (major1) == 7 && (major2) == 8 && (minor) <= 3)
-
-/* tool haddock-2.14.3 */
-#define TOOL_VERSION_haddock "2.14.3"
-#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\
-  (major1) <  2 || \
-  (major1) == 2 && (major2) <  14 || \
-  (major1) == 2 && (major2) == 14 && (minor) <= 3)
-
-/* tool happy-1.19.4 */
-#define TOOL_VERSION_happy "1.19.4"
-#define MIN_TOOL_VERSION_happy(major1,major2,minor) (\
-  (major1) <  1 || \
-  (major1) == 1 && (major2) <  19 || \
-  (major1) == 1 && (major2) == 19 && (minor) <= 4)
-
-/* tool hpc-0.67 */
-#define TOOL_VERSION_hpc "0.67"
-#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\
-  (major1) <  0 || \
-  (major1) == 0 && (major2) <  67 || \
-  (major1) == 0 && (major2) == 67 && (minor) <= 0)
-
-/* tool hsc2hs-0.67 */
-#define TOOL_VERSION_hsc2hs "0.67"
-#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\
-  (major1) <  0 || \
-  (major1) == 0 && (major2) <  67 || \
-  (major1) == 0 && (major2) == 67 && (minor) <= 0)
-
-/* tool hscolour-1.20 */
-#define TOOL_VERSION_hscolour "1.20"
-#define MIN_TOOL_VERSION_hscolour(major1,major2,minor) (\
-  (major1) <  1 || \
-  (major1) == 1 && (major2) <  20 || \
-  (major1) == 1 && (major2) == 20 && (minor) <= 0)
-
diff --git a/dist/build/libHStemplate-haskell-util-0.1.0.4.a b/dist/build/libHStemplate-haskell-util-0.1.0.4.a
deleted file mode 100644
Binary files a/dist/build/libHStemplate-haskell-util-0.1.0.4.a and /dev/null differ
diff --git a/dist/package.conf.inplace/package.cache b/dist/package.conf.inplace/package.cache
deleted file mode 100644
Binary files a/dist/package.conf.inplace/package.cache and /dev/null differ
diff --git a/dist/package.conf.inplace/template-haskell-util-0.1.0.4-inplace.conf b/dist/package.conf.inplace/template-haskell-util-0.1.0.4-inplace.conf
deleted file mode 100644
--- a/dist/package.conf.inplace/template-haskell-util-0.1.0.4-inplace.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-name: template-haskell-util
-version: 0.1.0.4
-id: template-haskell-util-0.1.0.4-inplace
-license: MIT
-copyright:
-maintainer: Haskell.Zhang.Song@hotmail.com
-stability: experimental
-homepage: https://github.com/HaskellZhangSong/TemplateHaskellUtils
-package-url:
-synopsis: Some utilities for template Haskell.
-description: Some functions that might be useful when you use template haskell.
-category: Template Haskell
-author: songzh
-exposed: True
-exposed-modules: Language.Haskell.TH.Utils
-hidden-modules:
-trusted: False
-import-dirs: D:\GHC\thu\TemplateHaskellUtils\dist\build
-library-dirs: D:\GHC\thu\TemplateHaskellUtils\dist\build
-hs-libraries: HStemplate-haskell-util-0.1.0.4
-extra-libraries:
-extra-ghci-libraries:
-include-dirs:
-includes:
-depends: GenericPretty-1.2.1-281911651e30ba17172d20e41038d2cb
-         base-4.7.0.1-7c4827d45272c6220486aa798a981cbc
-         ghc-prim-0.3.1.0-95dc0c72a075ab56f8cdd74470fc7c3d
-         template-haskell-2.9.0.0-53d2bc0fb77759033214841630b100f0
-hugs-options:
-cc-options:
-ld-options:
-framework-dirs:
-frameworks:
-haddock-interfaces: D:\GHC\thu\TemplateHaskellUtils\dist\doc\html\template-haskell-util\template-haskell-util.haddock
-haddock-html: D:\GHC\thu\TemplateHaskellUtils\dist\doc\html\template-haskell-util
diff --git a/dist/setup-config b/dist/setup-config
deleted file mode 100644
Binary files a/dist/setup-config and /dev/null differ
diff --git a/dist/setup/setup.hs b/dist/setup/setup.hs
deleted file mode 100644
--- a/dist/setup/setup.hs
+++ /dev/null
@@ -1,1 +0,0 @@
-import Distribution.Simple; main = defaultMain
diff --git a/dist/setup/setup.version b/dist/setup/setup.version
deleted file mode 100644
--- a/dist/setup/setup.version
+++ /dev/null
@@ -1,1 +0,0 @@
-Version {versionBranch = [1,22,0,0], versionTags = []}
diff --git a/src/Language/Haskell/TH/Utils.hs b/src/Language/Haskell/TH/Utils.hs
--- a/src/Language/Haskell/TH/Utils.hs
+++ b/src/Language/Haskell/TH/Utils.hs
@@ -14,19 +14,17 @@
 -----------------------------------------------------------------------------
 
 module Language.Haskell.TH.Utils(
-       appExp, appExp',
-       appConT, appConT',
-       curryType, curryType',
+       rename, rename', rename'', nameToExp, 
+       appExp, appExp', unappExp, unappExp',
+       appConT, appConT', unappConT, unappConT',
+       curryType, curryType', uncurryType, uncurryType',
        genBT, genBT',
        genPE, genPE',
-       appKinds,
-       curryKind,
-       getTypeNames,
-       getTVBName ,
+       appKind, unappKind,
+       curryKind, uncurryKind,
+       getTypeNames, getTVBName ,
        getCompositeType,getConName,
-       seqTup2, seqTup3,seqTup4, 
-       rename, rename', rename'',
-       nameToExp, 
+       seqTup2, seqTup3,seqTup4, unsequence,
        printQ, pprintQ, printiQ, printi,
        -- | exported GenericPretty package
        module Text.PrettyPrint.GenericPretty
@@ -36,13 +34,16 @@
 import Language.Haskell.TH
 import Language.Haskell.TH.Lib hiding (Role)
 import Data.List (foldl1,foldr1)
+import Debug.Trace
 import Control.Monad
 import Language.Haskell.TH.Syntax
 import Text.PrettyPrint.GenericPretty
 import GHC.Generics hiding (Fixity)
 import GHC.Word
 import GHC.Types
+import Data.List
 
+import System.IO.Unsafe
 -- sorry for the following messy, I will write a library to generate empty instances automatically
 instance Out Name
 instance Out Type
@@ -87,7 +88,7 @@
 instance Out AnnTarget
 instance Out Word8
 
--- sorry for the messy, I will also write a library to do this automatically
+-- sorry for the messy, I will also write a TH library to do this automatically
 deriving instance Generic FixityDirection
 deriving instance Generic Inline
 deriving instance Generic RuleBndr
@@ -146,7 +147,8 @@
   from x = M1 (M1 (M1 (K1 x)))
   to (M1 (M1 (M1 (K1 x)))) = x
 
--- This is bacause GHC 7.8 does not support unboxed value to be made into Generic
+-- This is bacause GHC 7.8 does not support unlifted value to be made into Generic
+-- I am trying to do it with Template Haskell
 instance Generic NameFlavour where
   type Rep NameFlavour = (Rep NameFlavour')
   from (NameS) = from NameS'
@@ -179,7 +181,7 @@
 > printiQ  [| (1+1) * 5|]
 > InfixE (Just InfixE (Just LitE (IntegerL 1))
 >                   (VarE (Name (OccName "+")
->                                (NameG' VarName
+>                               (NameG' VarName
 >                                        (PkgName "base")
 >                                        (ModName "GHC.Num"))))
 >                    (Just LitE (IntegerL 1)))
@@ -189,6 +191,7 @@
 >                           (ModName "GHC.Num"))))
 >       (Just LitE (IntegerL 5))
 -}
+
 printiQ :: Out a => Q a -> IO ()
 printiQ q = runQ q >>= pp
 
@@ -200,6 +203,13 @@
 printQ :: Show a => Q a -> IO ()
 printQ q = runQ q >>= putStrLn.show
 
+-- | Debug print
+dprint :: Show a => String -> Q a -> Q a
+dprint str q = do
+           a <- q
+           trace (str ++ ": " ++ show a) q
+
+
 -- | sequence-like functons on tuples
 seqTup2 :: (Q a, Q b) -> Q (a, b) 
 seqTup2 (a,b) = liftM2 (,) a b
@@ -210,6 +220,12 @@
 seqTup4 :: (Q a, Q b, Q c, Q d) -> Q (a, b, c, d)
 seqTup4 (a,b,c,d) = liftM4 (,,,) a b c d
 
+-- | Unsequence @Q [a]@ to [Q a], but you never get rid of the outer 'Q'
+unsequence :: Q [a] -> Q [Q a]
+unsequence qs = do
+           s <- qs
+           return $ map return s
+
 -- | Rename a 'Name'
 rename :: Q Name -> (String -> String) -> Q Name
 rename n f = do
@@ -252,6 +268,31 @@
 appExp' :: [Exp] -> Exp
 appExp' = foldl1 AppE
 
+unappExp :: ExpQ -> Q [Exp]
+unappExp = fmap unappExp'
+
+unappExp' :: Exp -> [Exp]
+unappExp' a@(AppE e1 e2) = reverse $ unfold (not.isAppE)  unappE restUnappE a
+unappExp' e = [e]
+
+foo = (AppE (AppE (VarE 'const) (LitE (IntegerL 3))) (ConE (mkName "True")))
+
+isAppE :: Exp -> Bool
+isAppE (AppE _ _) = True
+isAppE _ = False
+
+unappE :: Exp -> Exp
+unappE (AppE e1 e2) = e2
+unappE x = x
+
+restUnappE :: Exp -> Exp
+restUnappE (AppE e1 e2) = e1
+restunappE x = x
+
+unfold :: (t1 -> Bool) -> (t1 -> t1) -> (t1 -> t1) -> t1 -> [t1]
+unfold p h t x | p x = [x]
+               | otherwise =  h x : unfold p h t (t x)
+
 -- | Apply a type constructor like 'appExp'
 
 {-|
@@ -262,10 +303,35 @@
 appConT :: [TypeQ] -> TypeQ
 appConT = foldl1 appT
 
+-- | Unapply a constructor application to a list of types
+unappConT' :: Type -> [Type]
+unappConT' a@(AppT t1 t2) = reverse $ unfold (not.isAppT) unappT restUnappT a
+unappConT' a@(ForallT tvbs cxt t) = reverse $ unfold (not.isAppT) unappT restUnappT t
+unappConT' x = [x]
+
+-- | Unapply a constructor application to a list of types
+unappConT :: TypeQ -> Q [Type]
+unappConT = fmap unappConT'
+
+--fooT = AppT (AppT (ConT ''Either) (ConT ''Int)) (ConT ''Bool)
+
+isAppT :: Type -> Bool
+isAppT (AppT _ _ ) = True
+isAppT _ = False
+
+unappT :: Type -> Type
+unappT (AppT t1 t2) = t2
+unappT x = x
+
+restUnappT :: Type -> Type
+restUnappT (AppT t1 t2) = t1
+restUnappT x = x
+
 appConT' :: [Type] -> Type
 appConT' = foldl1 AppT
 
--- | > convert [a, b, c] to a -> b -> c
+
+-- | convert @[a, b, c]@ to @a -> b -> c@
 {-|
 > > pprint $ curryType' (map ConT [''Int , ''Int , ''Bool])
 > "GHC.Types.Int -> GHC.Types.Int -> GHC.Types.Bool"
@@ -276,7 +342,24 @@
 curryType' :: [Type] -> Type
 curryType' = foldr1 (\t1 -> AppT (AppT ArrowT t1))
 
+-- | > convert @a -> b -> c@ to @[a,b,c]
 {-|
+> > uncurryType' (ForallT [PlainTV (mkName "a")] [] (AppT (AppT ArrowT (VarT (mkName "a"))) (ConT ''Int)))
+> > [VarT a,ConT GHC.Types.Int]
+-}
+uncurryType :: TypeQ -> Q [Type]
+uncurryType = fmap uncurryType'
+
+uncurryType' :: Type -> [Type]
+uncurryType' t@(AppT (AppT ArrowT t1) t2) = t1 : helper t2
+uncurryType' t@(ForallT tyvs cxt ty) = helper ty
+uncurryType' x = [x]
+
+helper :: Type -> [Type]
+helper t@(AppT (AppT ArrowT t1) t2) = t1 : helper t2
+helper t = [t]
+
+{-|
 > > genBT' "a" 3
 > ([PlainTV a1,PlainTV a2,PlainTV a3],[VarT a1,VarT a2,VarT a3])
 -}
@@ -294,11 +377,11 @@
 genBT' name n = let ns = [name++ (show i) | i <- [1..n]] 
                     in (map (plainTV.mkName) ns, map (VarT . mkName) ns)
 
+
 {-|
 > > genPE' "a" 3
 > ([VarP a1,VarP a2,VarP a3],[VarE a1,VarE a2,VarE a3])
 -}
-
 -- | Generate related patterns and expressions
 genPE :: String -> Int -> Q ([PatQ],[ExpQ])
 genPE name n = do 
@@ -313,13 +396,21 @@
                  in (map (VarP . mkName) ns,map (VarE . mkName) ns)
 
 -- | Apply a list of kinds, like 'appConT'
-appKinds :: [Kind] -> Kind
-appKinds = foldr1 AppT
+appKind :: [Kind] -> Kind
+appKind = foldr1 AppT
 
+-- | Like 'unappConT' 
+unappKind :: Kind -> [Kind]
+unappKind  = unappConT'
+
 -- | Like 'curryType' but on kind level
 curryKind :: [Kind] -> Kind
 curryKind =  curryType'
 
+-- | Like 'uncurryType'
+uncurryKind :: Kind -> [Kind]
+uncurryKind = uncurryType'
+
 -- | Get name from constructors
 getConName :: Con -> Name 
 getConName (NormalC name _)  = name 
@@ -327,7 +418,7 @@
 getConName (InfixC _ name _) = name 
 getConName (ForallC _ _ con) = getConName con 
 
--- | Get type Names recursively
+-- | Get type Names recursively, You can transform it to set if you want.
 getTypeNames :: Type -> [Name]
 getTypeNames (ForallT tvbs cxt t) = getTypeNames t
 getTypeNames (ConT n) = [n]
@@ -348,4 +439,3 @@
 getCompositeType (InfixC st1 n st2)     = concatMap getTypeNames [snd st1 , snd st2]
 -- This could be a problem since it will lose info for context and type variables 
 getCompositeType (ForallC tvbs cxt con) = getCompositeType con
-
diff --git a/template-haskell-util.cabal b/template-haskell-util.cabal
--- a/template-haskell-util.cabal
+++ b/template-haskell-util.cabal
@@ -2,7 +2,7 @@
 -- further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                template-haskell-util
-version:             0.1.0.4
+version:             0.1.1.0
 synopsis:            Some utilities for template Haskell.
 description:         Some functions that might be useful when you use template haskell.
 homepage:            https://github.com/HaskellZhangSong/TemplateHaskellUtils
@@ -11,10 +11,11 @@
 author:              songzh
 maintainer:          Haskell.Zhang.Song@hotmail.com
 -- copyright:           
-stability:	         experimental
+stability:	        experimental
 category:            Template Haskell
 build-type:          Simple
 extra-source-files:  README.md
+                     changelog.md
 cabal-version:       >=1.10
 
 library
