template-haskell-util 0.1.0.4 → 0.1.1.0
raw patch · 113 files changed
+131/−813 lines, 113 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
Files
- .git/#COMMIT_EDITMSG# +0/−26
- .git/COMMIT_EDITMSG +0/−10
- .git/COMMIT_EDITMSG~ +0/−10
- .git/HEAD +0/−1
- .git/config +0/−14
- .git/description +0/−1
- .git/hooks/applypatch-msg.sample +0/−15
- .git/hooks/commit-msg.sample +0/−24
- .git/hooks/post-update.sample +0/−8
- .git/hooks/pre-applypatch.sample +0/−14
- .git/hooks/pre-commit.sample +0/−49
- .git/hooks/pre-push.sample +0/−54
- .git/hooks/pre-rebase.sample +0/−169
- .git/hooks/prepare-commit-msg.sample +0/−36
- .git/hooks/update.sample +0/−128
- .git/index binary
- .git/info/exclude +0/−6
- .git/logs/HEAD +0/−10
- .git/logs/refs/heads/master +0/−10
- .git/logs/refs/remotes/origin/HEAD +0/−1
- .git/logs/refs/remotes/origin/master +0/−7
- .git/objects/01/a44973c56cb3b89b9b94d32e0674fb4139b519 +0/−3
- .git/objects/04/4d92ff41144323a5f3560042b11cd4c1ba5e27 binary
- .git/objects/06/14f36be9b51319da5697bdeb915abdeef87598 binary
- .git/objects/07/0c1131e874660cd0b399ef47d1b858ff8793a0 binary
- .git/objects/08/2597fc126f447143f810f32ce83938409c4055 binary
- .git/objects/08/4a706a37d6164dfb1fab5dcd4e098bcdfe0ffa +0/−2
- .git/objects/0a/5c8b86bc82d2e802c87753d0d281666fb1d2cf binary
- .git/objects/0e/b705ecf8acd3e0faadbf5b8f9223c3f2af7d2f binary
- .git/objects/11/85ce856677a3fab9b4b8152e7188867948cead binary
- .git/objects/11/9bdac5caf8dccdce98352d29af74517692984c binary
- .git/objects/14/cc1d44e537fa8f1f5f188c77de2de18c399dd8 binary
- .git/objects/17/a8b7d220ae5394a9369c889384673567f2ffe2 binary
- .git/objects/1b/fe09ade13ffc3e9646506a8bd07d9f06282ca8 +0/−3
- .git/objects/1d/5ed8a5bd5a630d659dac826f1d251b60317469 binary
- .git/objects/1d/c0ca8607b48e6eb1ef35d1a875020bad45711b binary
- .git/objects/1e/427715ecf5a13ab5e0dd5148343b3c5c85ede3 binary
- .git/objects/1f/09cdb8471418bfb9d426a81124fc05387864de binary
- .git/objects/20/ca248c4d12a9cc5a4441bfb342b60922824040 binary
- .git/objects/22/06167d3bd9beff796b124fc62b10cf920ddedc +0/−1
- .git/objects/25/e665418344ac3e22647b09133c46f11764adc7 binary
- .git/objects/26/b3e7dc8604f16cd517c71a150db8e193d71710 binary
- .git/objects/2f/04dee5ff3b9942714d4746b9d0a8c5d5509085 binary
- .git/objects/35/d3e81042a51a696393d60d9e6091189c807d4f binary
- .git/objects/3b/c5e4c57a4d26371071febf2c9201f648327754 binary
- .git/objects/40/e84137de681e2b3710c60e78cca1b541967f6b binary
- .git/objects/42/905a03530679e07e9aeb8c52f5fe1219207e01 binary
- .git/objects/45/ff6c45a9cb2bee78bb34a530229037cfac04dd binary
- .git/objects/48/c8e4a7b86032067949768c343e0673410a676c binary
- .git/objects/4a/96e90bdb920aa512ecdbdaa5f8d901f67e4a9a binary
- .git/objects/4e/5006d92e85b87d8f4d74bcc32eb6533505ce5e binary
- .git/objects/5c/bb9a4d1c9a35dcb29eb3866afb1e33e0c304c9 binary
- .git/objects/5f/1699dd4e3d55b4caa1e57011c3532da41e3399 binary
- .git/objects/60/f79d207a4fdc123ed588c5e07108374dc4c596 binary
- .git/objects/62/4eb04567b70087227deed14cc2935aa0ff6446 binary
- .git/objects/64/73929c7950d01d618a45420165c543b8cb4ff2 binary
- .git/objects/68/c829d10241779b0f24a4fb2da9c5eb4d41942c binary
- .git/objects/6a/35d077429c47159fd674466174acd97eb207b8 +0/−2
- .git/objects/71/2891fcdda0381f84adb48cac21c035028d3a8c binary
- .git/objects/74/a4e672ebf4b930e5dd6b616fa4bc2a02365466 binary
- .git/objects/78/3415d3261400ad2ad430037813a214e5742735 binary
- .git/objects/7a/0cc2115b5d2bdce511903df0ae592ab1ab8c21 binary
- .git/objects/7f/01dc145616f4a53e0a186872830e49bff62efb +0/−3
- .git/objects/80/0d936c649cb85b2c545007389fdd4a161b8241 binary
- .git/objects/83/0ac91299ed1575b3936ea9e541fedc2c38399e binary
- .git/objects/83/3b4c60194337adacadea6fed3c2405dddc2bed binary
- .git/objects/83/775c596675f20802bddca97764740eed061457 binary
- .git/objects/85/e0f51a55237cca950296b39f063057a52e85f6 binary
- .git/objects/8c/36a3364b672c8b85244909acf3a06a3501ad33 binary
- .git/objects/8e/2c733e2d82de61adc4fb9ea405eea6adde0477 binary
- .git/objects/94/992aa0ad781e24a35f65e071057a2aa7bef45d binary
- .git/objects/95/1c9d9e5c1b16b90f9f43e97c5e6ee8daeff319 binary
- .git/objects/98/b8bcf2f60d6e4d17e63fd4a4802182ad732501 binary
- .git/objects/9b/2c7a465fcbdaddb77e0203ea65b458b7c6df31 binary
- .git/objects/9d/75ddda94952b2353bcb98b30ffa96708137edb binary
- .git/objects/9e/43c01c01365d6d757188b2136789f5726dfac3 binary
- .git/objects/9f/2a3202024981da42b4521ac1ade80ad3d7b546 +0/−2
- .git/objects/a0/255b994096ec2c541e7257cfc164aa5794c09c binary
- .git/objects/a0/6307868bc41484fbaf1e60913612fa07e47aca binary
- .git/objects/a6/c5ae05a815bab01ab73604faea7d1edfeb91a9 binary
- .git/objects/ac/b473308a531cdd76f5e9f7e643a047a71fafd1 binary
- .git/objects/ad/fc307073786c3dea4d06fcc1733e77bb383c81 binary
- .git/objects/b5/b6ac12670f8ee43b1759402b346d9da60ab066 +0/−1
- .git/objects/b9/913ee76376fa16f1fbd6d525f8da421f33df57 binary
- .git/objects/be/3fb7a2051f825f8d2a8b3d299a604abf2b5244 +0/−1
- .git/objects/c3/c2f2418af9ac6f49318d05c4ab4a8bf3b398f7 +0/−1
- .git/objects/c7/77470c4d808739af195139dafd6041ab19e708 binary
- .git/objects/c9/b3cf02a7c8a4f0c7c556583944579408b3bb74 binary
- .git/objects/d1/247d5c2308a73ca68c144ce67b060d3023b385 +0/−2
- .git/objects/d1/f000c134b3b213d6a4be1bd79e2ae3bd7fe8de binary
- .git/objects/dc/3e4f86c7ead198e6595395057c6836d0e5c0c4 binary
- .git/objects/eb/cdb92439913cc476708cc8ec7920219062a79a +0/−1
- .git/objects/f4/e127a195ff2f05bd5913424e318a2b07cecb8f binary
- .git/objects/f7/1d9b249fecb00850d2ecfb07bae5ebbece36eb binary
- .git/packed-refs +0/−2
- .git/refs/heads/master +0/−1
- .git/refs/remotes/origin/HEAD +0/−1
- .git/refs/remotes/origin/master +0/−1
- README.md +18/−0
- changelog.md +1/−0
- dist/build/HStemplate-haskell-util-0.1.0.4.o binary
- dist/build/Language/Haskell/TH/Utils.hi binary
- dist/build/Language/Haskell/TH/Utils.o binary
- dist/build/autogen/Paths_template_haskell_util.hs +0/−35
- dist/build/autogen/cabal_macros.h +0/−100
- dist/build/libHStemplate-haskell-util-0.1.0.4.a binary
- dist/package.conf.inplace/package.cache binary
- dist/package.conf.inplace/template-haskell-util-0.1.0.4-inplace.conf +0/−35
- dist/setup-config binary
- dist/setup/setup.hs +0/−1
- dist/setup/setup.version +0/−1
- src/Language/Haskell/TH/Utils.hs +109/−19
- template-haskell-util.cabal +3/−2
@@ -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#-#
@@ -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-#
@@ -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-#
@@ -1,1 +0,0 @@-ref: refs/heads/master
@@ -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
@@ -1,1 +0,0 @@-Unnamed repository; edit this file 'description' to name the repository.
@@ -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+"$@"}-:
@@ -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-}
@@ -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
@@ -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+"$@"}-:
@@ -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 --
@@ -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
@@ -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".
@@ -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"
@@ -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
binary file changed (440 → absent bytes)
@@ -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]-# *~
@@ -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
@@ -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
@@ -1,1 +0,0 @@-0000000000000000000000000000000000000000 6a35d077429c47159fd674466174acd97eb207b8 HaskellZhangSong <Haskell.Zhang.Song@hotmail.com> 1424579505 +0800 clone: from https://github.com/HaskellZhangSong/TemplateHaskellUtils.git
@@ -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
@@ -1,3 +0,0 @@-xÎ=Â0@aæÂ;R7qÁBìllnâд©J¸??â¬ßðôB¦±BÛùM]U GV-Øc׳M¼SÞÒNuESrÈfUç-°cÑ«D½"¨´³Ák£xTç<ëPV8Ëã®9_o2ßàðæKÍÇNC©¹ e:úÖ³'Ç-líÞZóÖ÷rÕ¿ÄL^2¤1+<(UÍIVB
binary file changed (51 → absent bytes)
binary file changed (52 → absent bytes)
binary file changed (157 → absent bytes)
binary file changed (49 → absent bytes)
@@ -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
binary file changed (44 → absent bytes)
binary file changed (52 → absent bytes)
binary file changed (199 → absent bytes)
binary file changed (83 → absent bytes)
binary file changed (50 → absent bytes)
binary file changed (123 → absent bytes)
@@ -1,3 +0,0 @@-xmSMoÔ0åÚHþsF³[D+mEÔr`7'Äù~=ãl²¾Åoæù½Ú¸n?¼SðhuÔÂ@Ä~0"b©Dø Æ)jÃQÖ¡EOzæ6ðÕy`Ñ´ÉG ¤kR6¨½*Æá®ªf^î|WMU-èCÙ%-±b+¬èñ^ÿêbÅoj¥.ËW|ÍW|Å0Z7.àë²+2Z¾ÃÃÁ4g ÄÐx=dù§î©µM¶É×¢zÝ©5Ql?--.åïñâDwé0Ï&Ðp:UªyãújòS Ûííªý¼øA+nÐK6x~ܲտ?=~Þ~ÛmY!RTάMãôÎ_Å^hZ¦m,³ñ,é£rJ)®¶ß¸aôygm2Ó9?ßÂùJ4VÔIYÆq8ÉØiÊ!ø½(K¾ÁÉJ^æ÷í§/Ï[ÞËÌMÉ,_Åà~³ækÚBí Y/(ËÞÉdhòåt)|±¸àÓx®®æ\Lùv9Ý'x`ZHÎÇd7c´òÅZP>6wü-Àõ1(Ëo÷¸á·¹[ žÔ~i¾ÉÄV$K3szrvq³Z¯þÝ)k
binary file changed (182 → absent bytes)
binary file changed (198 → absent bytes)
binary file changed (45 → absent bytes)
binary file changed (50 → absent bytes)
binary file changed (45 → absent bytes)
@@ -1,1 +0,0 @@-xuÎAK1`ÏùzQÜ=´ÒKЫ°8éNÈL´þxm5Ìyã;<l·7+ttÁ*í|Po:1YhÈC¼< N9C_iT^j¸ôàù>èdIbÊk[|ã)Æ0Ã"¢à¡¬ÄD"ÅF{×`Ý`s¨|IXc³Tm/§Ý}ù_hQ+°ÎÊ hÊ^955|RRô¶+qÑ-ü¯ýÌS·à])õeúÃÿ;\=æLùÒ\W±ÝnÓ
binary file changed (1937 → absent bytes)
binary file changed (226 → absent bytes)
binary file changed (60 → absent bytes)
binary file changed (199 → absent bytes)
binary file changed (180 → absent bytes)
binary file changed (53 → absent bytes)
binary file changed (9517 → absent bytes)
binary file changed (49 → absent bytes)
binary file changed (50 → absent bytes)
binary file changed (44 → absent bytes)
binary file changed (3596 → absent bytes)
binary file changed (60 → absent bytes)
binary file changed (179 → absent bytes)
binary file changed (930 → absent bytes)
binary file changed (50 → absent bytes)
binary file changed (12658 → absent bytes)
binary file changed (45 → absent bytes)
@@ -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
binary file changed (174 → absent bytes)
binary file changed (112 → absent bytes)
binary file changed (198 → absent bytes)
binary file changed (3836 → absent bytes)
@@ -1,3 +0,0 @@-x½MoÚ0wæW¼bRUªÆ%0ÓÚÒF¤õ4 à!¤ÒúãûÚñXñ©§HñÄOÞ/ÏE>(Ð/w7ðÀ$ÂÓãxú ¦Ùj¯+Á¯ìÈ7¬X¥L,ùïXÁ0?Àw6gnîZ-|dé-9ÌÙ=PµöuÁ_W[/O¿ÇÉd¦Ö¡möqùçx2«"×ö'ßÑ[}n7«m¾ëÀõïYêÀ@Þß¡vs4ÂWW4_¦ð±¸|¬üÒÃÂ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¬»e1¸Ä2ÓK,ó³öÓ6þÇ̲: bÍ5ÅäzyYn =£÷Y[,òtmö!4ê sÄÑ~ÍZs¹ÞcUý¼=Îj43&åAµ!ém1Ò-)§$¾ÌSѳÅXÄiiN^¥Åd2 BÒÏëI,DE¸Ô¤o¶Ö6nÇr8¨cªÃûz<dû4ÂùàvÓÌe=yîS s¿í0A£ÚY¦6¹ñ?hJehºh@OO¿ÅY"y¢éß±-Õ î:À¬
binary file changed (1270 → absent bytes)
binary file changed (540 → absent bytes)
binary file changed (61 → absent bytes)
binary file changed (52 → absent bytes)
binary file changed (7632 → absent bytes)
binary file changed (54 → absent bytes)
binary file changed (227 → absent bytes)
binary file changed (50 → absent bytes)
binary file changed (199 → absent bytes)
binary file changed (50 → absent bytes)
binary file changed (49 → absent bytes)
binary file changed (174 → absent bytes)
binary file changed (500 → absent bytes)
@@ -1,2 +0,0 @@-xÎ=NÄ0@ajbz¤h<þVnÖo"b%Þû³ @ûO/Ö¶ äÝÓ<DÀ¸b$j´ÄN³OÞ$S<$Ö1塨ª¾ø>Á\³]`[È 1è*×J9êêm4³ïs¼ñù)ûþ±r¿½~Ë,¿´üØë:fãm_òh/ -ÙdÈgê¡å)ÿS\-£ Ô{ÏsýTߣôTè
binary file changed (78 → absent bytes)
binary file changed (227 → absent bytes)
binary file changed (49 → absent bytes)
binary file changed (44 → absent bytes)
binary file changed (552 → absent bytes)
@@ -1,1 +0,0 @@-x+)JMU07g040031Q(N-)-ÐË(fÐg¹÷ô¿õL§B_w·V½0¡EMYjQqf~CÌîY¾2³Lïl·¹-ë·ñÃ,'>7"v
binary file changed (226 → absent bytes)
@@ -1,1 +0,0 @@-xλNA aêyéVö\)B)ééè¼¶ÉFìì Íðþl@wôG¿ôÖnÃOc7;ƪPôE4ct&ÃSÔÁ}ñnÛð!UÍ"×(\H0%±Rg( B#eÇßcé»åû§ëûÂÛõoWþé¦]>ßÖIz{ñBÊTNDþÀz$û3'S¿k3÷¿&SÒ
@@ -1,1 +0,0 @@-xR;OÃ0XXìØÎÃI'¤"¡[˼ØNGuJq~=nkwHS^ì»ó÷¸³ îÄSñ [n¿3e³ÕÜ@ñ~Sj SkW¼ö·G Qú>O1DºµJ²³>äeø©x[Áe×V¯ª3 ¯5]ãØozÿRGÃ!UÆlûYTµQØÝÝmG¬\®ðaìG<ãðva¼*ýü~ïл^åpÑ#^Þfì=3ëM9aEÝ&ZÎÅßùòǧ·{&¾ry x_RûP¥QL( !(JÎiò,ÅRHÊNíÿADH´Ò8CaHpF8 ÀÑ7çÒ~\üW.:Éi4;±·ûøÓY¨xaqçÀÎÿAðÝ~ÏË
binary file changed (9252 → absent bytes)
binary file changed (470 → absent bytes)
@@ -1,2 +0,0 @@-xν0@aç>ÅÝMH[úGb£»Û¥÷FJI-ï/ÁõNNÌ)=*h'µ0C`}Û²¦ Bfè;F#-3:$bi¼+^*(²LmO]+ÉÙ0íEÚªÞÉVyã:[r+¾<Ï÷ ñN?i¾Ô|ì2åð171§3(£ Æ(G¤»îËÿÛJX-#%oó¥U4
binary file changed (555 → absent bytes)
binary file changed (1372 → absent bytes)
@@ -1,1 +0,0 @@-xuÎÁJÄ0`¯æ)~ð¢ØvE="W¡Ê8 b¶2ÝoR{pA!3ÿqnnïÎ.ÐÑ!«ôlåBxÕ1ÉBCòäuäI0pÂÌÊøL£taÍÁó#| ÐÑÄ´-¾ðcaFQðP~c"¢¿¼¾j°i°ÝW¹tØ`kPÏy¹6ƧcÄn¾¼/{´÷¨ 9uTæO¢){åÔÔæ¢· \iÞÂÁà<uÞá_ªÕÿG)K¸ºÉ/ËçæýSû¾önæ
binary file changed (652 → absent bytes)
binary file changed (53 → absent bytes)
@@ -1,2 +0,0 @@-# pack-refs with: peeled fully-peeled -6a35d077429c47159fd674466174acd97eb207b8 refs/remotes/origin/master
@@ -1,1 +0,0 @@-01a44973c56cb3b89b9b94d32e0674fb4139b519
@@ -1,1 +0,0 @@-ref: refs/remotes/origin/master
@@ -1,1 +0,0 @@-01a44973c56cb3b89b9b94d32e0674fb4139b519
@@ -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+
@@ -0,0 +1,1 @@+@applyKinds@ is renamed to @applyKind@
binary file changed (841858 → absent bytes)
binary file changed (748718 → absent bytes)
binary file changed (914838 → absent bytes)
@@ -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)
@@ -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)-
binary file changed (1211838 → absent bytes)
binary file changed (1150 → absent bytes)
@@ -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
binary file changed (123433 → absent bytes)
@@ -1,1 +0,0 @@-import Distribution.Simple; main = defaultMain
@@ -1,1 +0,0 @@-Version {versionBranch = [1,22,0,0], versionTags = []}
@@ -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 -
@@ -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