From fb1d9b7d2c3c8261fc5a2ce3698e6749458b207a Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 26 Jun 2008 21:05:01 +0000 Subject: [PATCH] removed transfer from gf3 --- transfer/Makefile | 51 -- transfer/README | 48 -- transfer/TODO | 55 --- transfer/compile_all.sh | 5 - transfer/doc/Makefile | 41 -- transfer/doc/mathpartir.sty | 390 --------------- transfer/doc/typesystem.tex | 479 ------------------- transfer/examples/aggregation/Abstract.gf | 24 - transfer/examples/aggregation/English.gf | 41 -- transfer/examples/aggregation/aggregate.tra | 56 --- transfer/examples/aggregation/tree.tra | 23 - transfer/examples/disjpatt.tra | 24 - transfer/examples/exp.tra | 33 -- transfer/examples/fib.tra | 12 - transfer/examples/layout.tra | 9 - transfer/examples/list.tra | 6 - transfer/examples/numerals.tra | 94 ---- transfer/examples/reflexive/Abstract.gf | 15 - transfer/examples/reflexive/English.gf | 54 --- transfer/examples/reflexive/reflexive.tra | 40 -- transfer/examples/reflexive/tree.tra | 21 - transfer/examples/stoneage.tra | 210 -------- transfer/examples/test.tra | 4 - transfer/examples/tricky-type-checking.tra | 37 -- transfer/examples/widesnake.tra | 21 - transfer/lib/bintree.tra | 22 - transfer/lib/bool.tra | 6 - transfer/lib/collection.tra | 77 --- transfer/lib/nat.tra | 24 - transfer/lib/prelude.tra | 502 -------------------- transfer/lib/vector.tra | 15 - transfer/transferc.hs | 39 -- transfer/trci.hs | 37 -- 33 files changed, 2515 deletions(-) delete mode 100644 transfer/Makefile delete mode 100644 transfer/README delete mode 100644 transfer/TODO delete mode 100644 transfer/compile_all.sh delete mode 100644 transfer/doc/Makefile delete mode 100644 transfer/doc/mathpartir.sty delete mode 100644 transfer/doc/typesystem.tex delete mode 100644 transfer/examples/aggregation/Abstract.gf delete mode 100644 transfer/examples/aggregation/English.gf delete mode 100644 transfer/examples/aggregation/aggregate.tra delete mode 100644 transfer/examples/aggregation/tree.tra delete mode 100644 transfer/examples/disjpatt.tra delete mode 100644 transfer/examples/exp.tra delete mode 100644 transfer/examples/fib.tra delete mode 100644 transfer/examples/layout.tra delete mode 100644 transfer/examples/list.tra delete mode 100644 transfer/examples/numerals.tra delete mode 100644 transfer/examples/reflexive/Abstract.gf delete mode 100644 transfer/examples/reflexive/English.gf delete mode 100644 transfer/examples/reflexive/reflexive.tra delete mode 100644 transfer/examples/reflexive/tree.tra delete mode 100644 transfer/examples/stoneage.tra delete mode 100644 transfer/examples/test.tra delete mode 100644 transfer/examples/tricky-type-checking.tra delete mode 100644 transfer/examples/widesnake.tra delete mode 100644 transfer/lib/bintree.tra delete mode 100644 transfer/lib/bool.tra delete mode 100644 transfer/lib/collection.tra delete mode 100644 transfer/lib/nat.tra delete mode 100644 transfer/lib/prelude.tra delete mode 100644 transfer/lib/vector.tra delete mode 100644 transfer/transferc.hs delete mode 100644 transfer/trci.hs diff --git a/transfer/Makefile b/transfer/Makefile deleted file mode 100644 index 1ef8da644..000000000 --- a/transfer/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -SRCDIR=../src - -GHC=ghc -GHCFLAGS=-i$(SRCDIR) -GHCOPTFLAGS=-O2 - - -.PHONY: all bnfc bnfctest doc docclean clean bnfcclean distclean - -all: GHCFLAGS += $(GHCOPTFLAGS) -all: - $(GHC) $(GHCFLAGS) --make -o trci trci.hs - $(GHC) $(GHCFLAGS) --make -o transferc transferc.hs - -bnfc: bnfcclean - cd $(SRCDIR) && bnfc -gadt -d -p Transfer Transfer/Core/Core.cf - perl -i -pe 's/^import Transfer.Core.ErrM/import Transfer.ErrM/' $(SRCDIR)/Transfer/Core/*.{hs,x,y} - -rm -f $(SRCDIR)/Transfer/Core/ErrM.hs - cd $(SRCDIR) && alex -g Transfer/Core/Lex.x - cd $(SRCDIR) && happy -gca Transfer/Core/Par.y - cd $(SRCDIR) && bnfc -gadt -d -p Transfer Transfer/Syntax/Syntax.cf - perl -i -pe 's/^import Transfer.Syntax.ErrM/import Transfer.ErrM/' $(SRCDIR)/Transfer/Syntax/*.{hs,x,y} - -rm -f $(SRCDIR)/Transfer/Syntax/ErrM.hs - cd $(SRCDIR) && alex -g Transfer/Syntax/Lex.x - cd $(SRCDIR) && happy -gca Transfer/Syntax/Par.y - -bnfctest: - ghc $(GHCFLAGS) --make $(SRCDIR)/Transfer/Core/Test.hs -o test_core - ghc $(GHCFLAGS) --make $(SRCDIR)/Transfer/Syntax/Test.hs -o test_syntax - ghc $(GHCFLAGS) --make $(SRCDIR)/Transfer/Syntax/ResolveLayout.hs -o test_layout - -doc: - (cd $(SRCDIR)/Transfer/Core/; latex Doc.tex; dvips Doc.dvi -o Doc.ps) - (cd $(SRCDIR)/Transfer/Syntax/; latex Doc.tex; dvips Doc.dvi -o Doc.ps) - -docclean: - -rm -f $(SRCDIR)/Transfer/Core/*.{log,aux,dvi,ps} - -rm -f $(SRCDIR)/Transfer/Syntax/*.{log,aux,dvi,ps} - -clean: - -rm -f *.o *.hi - find $(SRCDIR)/Transfer -name '*.o' -o -name '*.hi' | xargs rm -f - -rm -f trci - -rm -f transferc - -rm -f test_core test_syntax test_layout - -bnfcclean: - -rm -f $(SRCDIR)/Transfer/Core/{Doc,Lex,Par,Layout,Skel,Print,Test,Abs}.* - -rm -f $(SRCDIR)/Transfer/Syntax/{Doc,Lex,Par,Layout,Skel,Print,Test,Abs}.* - -distclean: clean bnfcclean diff --git a/transfer/README b/transfer/README deleted file mode 100644 index 5a764ca07..000000000 --- a/transfer/README +++ /dev/null @@ -1,48 +0,0 @@ -Some features of the Transfer language: - -* Purely functional -* Dependent types -* Eager evaluation -* Generalized algebraic datatypes -* Metavariables -* Records with subtyping -* Overloading by explicit dictionary passing -* Pattern matching by case expressions - -Additional features in the front-end language: - -* Disjunctive patterns -* do-notation -* Automatic derivation of some operations on user-defined GADTs: - - Compositional maps and folds - - Equality - - Ordering - - Showing -* Pattern equations -* Operator syntax for common functions, most are overloaded - - - -Differences between Transfer and Cayenne: - -* Cayenne has a more advanced module system - -* Cayenne has mutually recursive record fields - -* Cayenne erases type arguments before running - -* Transfer is eager, Cayenne is lazy - -* Transfer has GADTs (inductive families) - -* Transfer has metavariables - -* Transfer has record patterns - -* Transfer has disjunctive patterns - -* Transfer has derivation of compositional functions - -* Transfer has a standard library which uses a hierarchy - of "type classes" - diff --git a/transfer/TODO b/transfer/TODO deleted file mode 100644 index 6ad3a3428..000000000 --- a/transfer/TODO +++ /dev/null @@ -1,55 +0,0 @@ -* Improve front-end language - -- implicit arguments? - -- show generation - -- ord generation - -- better module system - -- Negated patterns? - -- Simplify taking many arguments of the same type: f : (A,B : Type) -> ... - -- add record extension operator? - -* Improve interpreter - -- More efficient handling of constructor application - -- Implement tail recursion. - -* Improve the core language - -* Add primitive types operations to core - -- add Char type, with primitive operations: - - Enum stuff - -- add more primitive operations on strings: - - make list an isntance of the collection class for strings - -* Add more libraries - -- Enum class - -- Bounded class - -- list functions - -- a map structure - -- collections framework? - -- state monad - -* Improve compilation - -* Implement module system in interpreter - -* Add type checker for core - -* Add friendly type checker for front-end language - -* Add termination checker diff --git a/transfer/compile_all.sh b/transfer/compile_all.sh deleted file mode 100644 index d229d4dec..000000000 --- a/transfer/compile_all.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -for f in lib/*.tra examples/*.tra; do - ./transferc -ilib $f; -done diff --git a/transfer/doc/Makefile b/transfer/doc/Makefile deleted file mode 100644 index 02f0bec10..000000000 --- a/transfer/doc/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -FIGURES= - -NAME=typesystem - -default: pdf - -ps: $(NAME).ps - -pdf: $(NAME).pdf - -%.ps: %.dvi - dvips -f $^ > $@ - -#%.pdf: %.ps -# ps2pdf $^ - -%.pdf: %.dvi - dvipdfm $^ - -%.dvi: %.tex # %.bib - latex $* -# bibtex $* -# latex $* -# latex $* - -%.ps: %.dot - dot -Tps -o $@ $^ - -%.eps: %.ps - ps2epsi $^ $@ - -$(NAME).dvi: $(FIGURES) - -clean: - -rm -f *.aux *.dvi *.log *.blg *.bbl *.toc - -psclean: clean - -rm -f *.pdf *.ps - -show: $(NAME).dvi - xdvi $(NAME).dvi diff --git a/transfer/doc/mathpartir.sty b/transfer/doc/mathpartir.sty deleted file mode 100644 index 549596797..000000000 --- a/transfer/doc/mathpartir.sty +++ /dev/null @@ -1,390 +0,0 @@ -% Mathpartir --- Math Paragraph for Typesetting Inference Rules -% -% Copyright (C) 2001, 2002, 2003 Didier Rémy -% -% Author : Didier Remy -% Version : 1.1.1 -% Bug Reports : to author -% Web Site : http://pauillac.inria.fr/~remy/latex/ -% -% WhizzyTeX is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2, or (at your option) -% any later version. -% -% Mathpartir is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details -% (http://pauillac.inria.fr/~remy/license/GPL). -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% File mathpartir.sty (LaTeX macros) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mathpartir} - [2003/07/10 version 1.1.1 Math Paragraph for Typesetting Inference Rules] - -%% - -%% Identification -%% Preliminary declarations - -\RequirePackage {keyval} - -%% Options -%% More declarations - -%% PART I: Typesetting maths in paragraphe mode - -\newdimen \mpr@tmpdim - -% To ensure hevea \hva compatibility, \hva should expands to nothing -% in mathpar or in inferrule -\let \mpr@hva \empty - -%% normal paragraph parametters, should rather be taken dynamically -\def \mpr@savepar {% - \edef \MathparNormalpar - {\noexpand \lineskiplimit \the\lineskiplimit - \noexpand \lineskip \the\lineskip}% - } - -\def \mpr@rulelineskip {\lineskiplimit=0.3em\lineskip=0.2em plus 0.1em} -\def \mpr@lesslineskip {\lineskiplimit=0.6em\lineskip=0.5em plus 0.2em} -\def \mpr@lineskip {\lineskiplimit=1.2em\lineskip=1.2em plus 0.2em} -\let \MathparLineskip \mpr@lineskip -\def \mpr@paroptions {\MathparLineskip} -\let \mpr@prebindings \relax - -\newskip \mpr@andskip \mpr@andskip 2em plus 0.5fil minus 0.5em - -\def \mpr@goodbreakand - {\hskip -\mpr@andskip \penalty -1000\hskip \mpr@andskip} -\def \mpr@and {\hskip \mpr@andskip} -\def \mpr@andcr {\penalty 50\mpr@and} -\def \mpr@cr {\penalty -10000\mpr@and} -\def \mpr@eqno #1{\mpr@andcr #1\hskip 0em plus -1fil \penalty 10} - -\def \mpr@bindings {% - \let \and \mpr@andcr - \let \par \mpr@andcr - \let \\\mpr@cr - \let \eqno \mpr@eqno - \let \hva \mpr@hva - } -\let \MathparBindings \mpr@bindings - -% \@ifundefined {ignorespacesafterend} -% {\def \ignorespacesafterend {\aftergroup \ignorespaces} - -\newenvironment{mathpar}[1][] - {$$\mpr@savepar \parskip 0em \hsize \linewidth \centering - \vbox \bgroup \mpr@prebindings \mpr@paroptions #1\ifmmode $\else - \noindent $\displaystyle\fi - \MathparBindings} - {\unskip \ifmmode $\fi\egroup $$\ignorespacesafterend} - -% \def \math@mathpar #1{\setbox0 \hbox {$\displaystyle #1$}\ifnum -% \wd0 < \hsize $$\box0$$\else \bmathpar #1\emathpar \fi} - -%%% HOV BOXES - -\def \mathvbox@ #1{\hbox \bgroup \mpr@normallineskip - \vbox \bgroup \tabskip 0em \let \\ \cr - \halign \bgroup \hfil $##$\hfil\cr #1\crcr \egroup \egroup - \egroup} - -\def \mathhvbox@ #1{\setbox0 \hbox {\let \\\qquad $#1$}\ifnum \wd0 < \hsize - \box0\else \mathvbox {#1}\fi} - - -%% Part II -- operations on lists - -\newtoks \mpr@lista -\newtoks \mpr@listb - -\long \def\mpr@cons #1\mpr@to#2{\mpr@lista {\\{#1}}\mpr@listb \expandafter -{#2}\edef #2{\the \mpr@lista \the \mpr@listb}} - -\long \def\mpr@snoc #1\mpr@to#2{\mpr@lista {\\{#1}}\mpr@listb \expandafter -{#2}\edef #2{\the \mpr@listb\the\mpr@lista}} - -\long \def \mpr@concat#1=#2\mpr@to#3{\mpr@lista \expandafter {#2}\mpr@listb -\expandafter {#3}\edef #1{\the \mpr@listb\the\mpr@lista}} - -\def \mpr@head #1\mpr@to #2{\expandafter \mpr@head@ #1\mpr@head@ #1#2} -\long \def \mpr@head@ #1#2\mpr@head@ #3#4{\def #4{#1}\def#3{#2}} - -\def \mpr@flatten #1\mpr@to #2{\expandafter \mpr@flatten@ #1\mpr@flatten@ #1#2} -\long \def \mpr@flatten@ \\#1\\#2\mpr@flatten@ #3#4{\def #4{#1}\def #3{\\#2}} - -\def \mpr@makelist #1\mpr@to #2{\def \mpr@all {#1}% - \mpr@lista {\\}\mpr@listb \expandafter {\mpr@all}\edef \mpr@all {\the - \mpr@lista \the \mpr@listb \the \mpr@lista}\let #2\empty - \def \mpr@stripof ##1##2\mpr@stripend{\def \mpr@stripped{##2}}\loop - \mpr@flatten \mpr@all \mpr@to \mpr@one - \expandafter \mpr@snoc \mpr@one \mpr@to #2\expandafter \mpr@stripof - \mpr@all \mpr@stripend - \ifx \mpr@stripped \empty \let \mpr@isempty 0\else \let \mpr@isempty 1\fi - \ifx 1\mpr@isempty - \repeat -} - -%% Part III -- Type inference rules - -\def \mpr@rev #1\mpr@to #2{\let \mpr@tmp \empty - \def \\##1{\mpr@cons ##1\mpr@to \mpr@tmp}#1\let #2\mpr@tmp} - -\newif \if@premisse -\newbox \mpr@hlist -\newbox \mpr@vlist -\newif \ifmpr@center \mpr@centertrue -\def \mpr@htovlist {% - \setbox \mpr@hlist - \hbox {\strut - \ifmpr@center \hskip -0.5\wd\mpr@hlist\fi - \unhbox \mpr@hlist}% - \setbox \mpr@vlist - \vbox {\if@premisse \box \mpr@hlist \unvbox \mpr@vlist - \else \unvbox \mpr@vlist \box \mpr@hlist - \fi}% -} -% OLD version -% \def \mpr@htovlist {% -% \setbox \mpr@hlist -% \hbox {\strut \hskip -0.5\wd\mpr@hlist \unhbox \mpr@hlist}% -% \setbox \mpr@vlist -% \vbox {\if@premisse \box \mpr@hlist \unvbox \mpr@vlist -% \else \unvbox \mpr@vlist \box \mpr@hlist -% \fi}% -% } - -\def \mpr@sep{2em} -\def \mpr@blank { } -\def \mpr@hovbox #1#2{\hbox - \bgroup - \ifx #1T\@premissetrue - \else \ifx #1B\@premissefalse - \else - \PackageError{mathpartir} - {Premisse orientation should either be P or B} - {Fatal error in Package}% - \fi \fi - \def \@test {#2}\ifx \@test \mpr@blank\else - \setbox \mpr@hlist \hbox {}% - \setbox \mpr@vlist \vbox {}% - \if@premisse \let \snoc \mpr@cons \else \let \snoc \mpr@snoc \fi - \let \@hvlist \empty \let \@rev \empty - \mpr@tmpdim 0em - \expandafter \mpr@makelist #2\mpr@to \mpr@flat - \if@premisse \mpr@rev \mpr@flat \mpr@to \@rev \else \let \@rev \mpr@flat \fi - \def \\##1{% - \def \@test {##1}\ifx \@test \empty - \mpr@htovlist - \mpr@tmpdim 0em %%% last bug fix not extensively checked - \else - \setbox0 \hbox{$\displaystyle {##1}$}\relax - \advance \mpr@tmpdim by \wd0 - %\mpr@tmpdim 1.02\mpr@tmpdim - \ifnum \mpr@tmpdim < \hsize - \ifnum \wd\mpr@hlist > 0 - \if@premisse - \setbox \mpr@hlist - \hbox {\unhbox0 \hskip \mpr@sep \unhbox \mpr@hlist}% - \else - \setbox \mpr@hlist - \hbox {\unhbox \mpr@hlist \hskip \mpr@sep \unhbox0}% - \fi - \else - \setbox \mpr@hlist \hbox {\unhbox0}% - \fi - \else - \ifnum \wd \mpr@hlist > 0 - \mpr@htovlist - \mpr@tmpdim \wd0 - \fi - \setbox \mpr@hlist \hbox {\unhbox0}% - \fi - \advance \mpr@tmpdim by \mpr@sep - \fi - }% - \@rev - \mpr@htovlist - \ifmpr@center \hskip \wd\mpr@vlist\fi \box \mpr@vlist - \fi - \egroup -} - -%%% INFERENCE RULES - -\@ifundefined{@@over}{% - \let\@@over\over % fallback if amsmath is not loaded - \let\@@overwithdelims\overwithdelims - \let\@@atop\atop \let\@@atopwithdelims\atopwithdelims - \let\@@above\above \let\@@abovewithdelims\abovewithdelims - }{} - - -\def \mpr@@fraction #1#2{\hbox {\advance \hsize by -0.5em - $\displaystyle {#1\@@over #2}$}} -\let \mpr@fraction \mpr@@fraction -\def \mpr@@reduce #1#2{\hbox - {$\lower 0.01pt \mpr@@fraction {#1}{#2}\mkern -15mu\rightarrow$}} -\def \mpr@@rewrite #1#2#3{\hbox - {$\lower 0.01pt \mpr@@fraction {#2}{#3}\mkern -8mu#1$}} -\def \mpr@infercenter #1{\vcenter {\mpr@hovbox{T}{#1}}} - -\def \mpr@empty {} -\def \mpr@inferrule - {\bgroup - \ifnum \linewidth<\hsize \hsize \linewidth\fi - \mpr@rulelineskip - \let \and \qquad - \let \hva \mpr@hva - \let \@rulename \mpr@empty - \let \@rule@options \mpr@empty - \mpr@inferrule@} -\newcommand {\mpr@inferrule@}[3][] - {\everymath={\displaystyle}% - \def \@test {#2}\ifx \empty \@test - \setbox0 \hbox {$\vcenter {\mpr@hovbox{B}{#3}}$}% - \else - \def \@test {#3}\ifx \empty \@test - \setbox0 \hbox {$\vcenter {\mpr@hovbox{T}{#2}}$}% - \else - \setbox0 \mpr@fraction {\mpr@hovbox{T}{#2}}{\mpr@hovbox{B}{#3}}% - \fi \fi - \def \@test {#1}\ifx \@test\empty \box0 - \else \vbox -%%% Suggestion de Francois pour les etiquettes longues -%%% {\hbox to \wd0 {\RefTirName {#1}\hfil}\box0}\fi - {\hbox {\RefTirName {#1}}\box0}\fi - \egroup} - -\def \mpr@vdotfil #1{\vbox to #1{\leaders \hbox{$\cdot$} \vfil}} - -% They are two forms -% \inferrule [label]{[premisses}{conclusions} -% or -% \inferrule* [options]{[premisses}{conclusions} -% -% Premisses and conclusions are lists of elements separated by \\ -% Each \\ produces a break, attempting horizontal breaks if possible, -% and vertical breaks if needed. -% -% An empty element obtained by \\\\ produces a vertical break in all cases. -% -% The former rule is aligned on the fraction bar. -% The optional label appears on top of the rule -% The second form to be used in a derivation tree is aligned on the last -% line of its conclusion -% -% The second form can be parameterized, using the key=val interface. The -% folloiwng keys are recognized: -% -% width set the width of the rule to val -% narrower set the width of the rule to val\hsize -% before execute val at the beginning/left -% lab put a label [Val] on top of the rule -% lskip add negative skip on the right -% left put a left label [Val] -% Left put a left label [Val], ignoring its width -% right put a right label [Val] -% Right put a right label [Val], ignoring its width -% leftskip skip negative space on the left-hand side -% rightskip skip negative space on the right-hand side -% vdots lift the rule by val and fill vertical space with dots -% after execute val at the end/right -% -% Note that most options must come in this order to avoid strange -% typesetting (in particular leftskip must preceed left and Left and -% rightskip must follow Right or right; vdots must come last -% or be only followed by rightskip. -% - -\define@key {mprset}{flushleft}[]{\mpr@centerfalse} -\define@key {mprset}{center}[]{\mpr@centertrue} -\def \mprset #1{\setkeys{mprset}{#1}} - -\newbox \mpr@right -\define@key {mpr}{flushleft}[]{\mpr@centerfalse} -\define@key {mpr}{center}[]{\mpr@centertrue} -\define@key {mpr}{left}{\setbox0 \hbox {$\TirName {#1}\;$}\relax - \advance \hsize by -\wd0\box0} -\define@key {mpr}{width}{\hsize #1} -\define@key {mpr}{sep}{\def\mpr@sep{#1}} -\define@key {mpr}{before}{#1} -\define@key {mpr}{lab}{\let \RefTirName \TirName \def \mpr@rulename {#1}} -\define@key {mpr}{Lab}{\let \RefTirName \TirName \def \mpr@rulename {#1}} -\define@key {mpr}{narrower}{\hsize #1\hsize} -\define@key {mpr}{leftskip}{\hskip -#1} -\define@key {mpr}{reduce}[]{\let \mpr@fraction \mpr@@reduce} -\define@key {mpr}{rightskip} - {\setbox \mpr@right \hbox {\unhbox \mpr@right \hskip -#1}} -\define@key {mpr}{LEFT}{\setbox0 \hbox {$#1$}\relax - \advance \hsize by -\wd0\box0} -\define@key {mpr}{left}{\setbox0 \hbox {$\TirName {#1}\;$}\relax - \advance \hsize by -\wd0\box0} -\define@key {mpr}{Left}{\llap{$\TirName {#1}\;$}} -\define@key {mpr}{right} - {\setbox0 \hbox {$\;\TirName {#1}$}\relax \advance \hsize by -\wd0 - \setbox \mpr@right \hbox {\unhbox \mpr@right \unhbox0}} -\define@key {mpr}{RIGHT} - {\setbox0 \hbox {$#1$}\relax \advance \hsize by -\wd0 - \setbox \mpr@right \hbox {\unhbox \mpr@right \unhbox0}} -\define@key {mpr}{Right} - {\setbox \mpr@right \hbox {\unhbox \mpr@right \rlap {$\;\TirName {#1}$}}} -\define@key {mpr}{vdots}{\def \mpr@vdots {\@@atop \mpr@vdotfil{#1}}} -\define@key {mpr}{after}{\edef \mpr@after {\mpr@after #1}} - -\newdimen \rule@dimen -\newcommand \mpr@inferstar@ [3][]{\setbox0 - \hbox {\let \mpr@rulename \mpr@empty \let \mpr@vdots \relax - \setbox \mpr@right \hbox{}% - $\setkeys{mpr}{#1}% - \ifx \mpr@rulename \mpr@empty \mpr@inferrule {#2}{#3}\else - \mpr@inferrule [{\mpr@rulename}]{#2}{#3}\fi - \box \mpr@right \mpr@vdots$} - \setbox1 \hbox {\strut} - \rule@dimen \dp0 \advance \rule@dimen by -\dp1 - \raise \rule@dimen \box0} - -\def \mpr@infer {\@ifnextchar *{\mpr@inferstar}{\mpr@inferrule}} -\newcommand \mpr@err@skipargs[3][]{} -\def \mpr@inferstar*{\ifmmode - \let \@do \mpr@inferstar@ - \else - \let \@do \mpr@err@skipargs - \PackageError {mathpartir} - {\string\inferrule* can only be used in math mode}{}% - \fi \@do} - - -%%% Exports - -% Envirnonment mathpar - -\let \inferrule \mpr@infer - -% make a short name \infer is not already defined -\@ifundefined {infer}{\let \infer \mpr@infer}{} - -\def \TirNameStyle #1{\small \textsc{#1}} -\def \tir@name #1{\hbox {\small \TirNameStyle{#1}}} -\let \TirName \tir@name -\let \DefTirName \TirName -\let \RefTirName \TirName - -%%% Other Exports - -% \let \listcons \mpr@cons -% \let \listsnoc \mpr@snoc -% \let \listhead \mpr@head -% \let \listmake \mpr@makelist - - - - -\endinput diff --git a/transfer/doc/typesystem.tex b/transfer/doc/typesystem.tex deleted file mode 100644 index fb26b064c..000000000 --- a/transfer/doc/typesystem.tex +++ /dev/null @@ -1,479 +0,0 @@ -\documentclass[a4paper,11pt]{article} -\usepackage{mathpartir} -\usepackage{amssymb} - -\begin{document} - -\title{Transfer Type Checking} -\author{Bj\"orn Bringert \\ \texttt{bringert@cs.chalmers.se}} -\maketitle - -\section{Type Checking Algorithm} - -This is the beginnings of a type checking algorithm for the -Transfer Core language. It is far from complete, -and some of the rules make no sense at all at the moment. - -\subsection{Notation} - -$\overline{a}$ is a list of $a$s. - -$x$ stands for variables. - -$A$,$B$,$C$ are terms which we use for types. - -$s$,$t$ are any terms. - -$l$ refers to record labels. - -$p$ refers to patterns. - -$c$ refers to constructors. - -$\Delta$ is a set of constructor typings. - -$\Gamma$ is a set of variable typings. - -$\Delta;\Gamma \vdash t \uparrow A$ means that in the -variable typing context $\Gamma$ and the constructor -typing context $\Delta$, the type of $t$ can be inferred -to be $A$. - -$\Delta;\Gamma \vdash t \downarrow A$ means that in the -variable typing context $\Gamma$ and the constructor -typing context $\Delta$, the type of $t$ can be -checked to be $A$. - -$\Delta \vdash_p p \downarrow A; \Gamma$ means that -in the constructor typing context $\Delta$, -the pattern $p$ can matched against a value of type -$A$, and if the match succeeds, it will create -variable bindings with the typings $\Gamma$. - -$A \leq B$ means that $A$ is a subtype of of $B$. - -$A \lesssim B$ means that $A$ is convertible -to a subtype of $B$. - -\subsection{Language} - -\begin{eqnarray*} -s,t,u & ::= & \textrm{let} \ x = s \ \textrm{in} \ t \\ -& & | \ \textrm{case} \ s \ \textrm{of} \{ \overline{p \mid t \rightarrow u} \} \\ -& & | \ \lambda x . t \\ -& & | \ (x : s) \rightarrow t \\ -& & | \ s \ t \\ -& & | \ s.l \\ -& & | \ \textrm{sig} \ \{ \overline{l : t} \} \\ -& & | \ \textrm{rec} \ \{ \overline{l = t} \} \\ -& & | \ x \\ -& & | \ Type \\ -& & | \ string \\ -& & | \ integer \\ -& & | \ double \\ -p & ::= & x \ | \ \_ \ | \ (c \overline{p}) \ | \ rec \ \{ \overline{l = p} \} \ | \ string \ | \ integer -\end{eqnarray*} - - - -\subsection{Rules} - -\begin{figure} -\begin{mathpar} - -\inferrule[Type annotation] -{ \Delta;\Gamma \vdash t \downarrow A } -{ \Delta;\Gamma \vdash t : A \uparrow A } - -\and - -\inferrule[Check by inferring] -{ \Delta;\Gamma \vdash t \uparrow A' \\ - A' \lesssim A} -{ \Delta;\Gamma \vdash t \downarrow A } - -\and - -\inferrule[Variable] -{ x : A \in \Gamma } -{ \Delta;\Gamma \vdash x \uparrow A } - -\and - -\inferrule[Constructor] -{ c : A \in \Delta } -{ \Delta;\Gamma \vdash c \uparrow A } - -\and - -\inferrule[Function type] -{ \Delta;\Gamma \vdash A \downarrow Type \\ - \Delta;\Gamma, x : A \vdash B \downarrow Type } -{ \Delta;\Gamma \vdash (x : A) \rightarrow B \downarrow Type } - -\and - -\inferrule[Abstraction] -{ \Delta;\Gamma, x : A \vdash s \downarrow B } -{ \Delta;\Gamma \vdash \lambda x. s \downarrow (x : A) \rightarrow B } - -\and - -\inferrule[Application] -{ \Delta;\Gamma \vdash s \uparrow (x : A) \rightarrow B \\ - \Delta;\Gamma \vdash t \downarrow A -} -{ \Delta;\Gamma \vdash s \ t \uparrow B [x / t] } - -\and - -\inferrule[Local definition] -{ \Delta;\Gamma \vdash s \uparrow A \\ - \Delta;\Gamma, x : A \vdash t \uparrow B } -{ \Delta;\Gamma \vdash \textrm{let} \ x = s \ \textrm{in} \ t \uparrow B } - -\and - -\inferrule[Case analysis] -{ \Delta;\Gamma \vdash s \uparrow A \\ - B = B_1 \vee \ldots \vee B_n \\ - \Delta \vdash_p p_1 \downarrow A; \Gamma_1 \\ - \Delta;\Gamma,\Gamma_1 \vdash g_1 \downarrow Bool \\ - \Delta;\Gamma,\Gamma_1 \vdash t_1 \uparrow B_1 \\ - \ldots \\ - \Delta p_n \vdash_p A; \Gamma_n \\ - \Delta;\Gamma, \Gamma_n \vdash g_n \downarrow Bool \\ - \Delta;\Gamma, \Gamma_n \vdash t_n \uparrow B_n -} -{ \Delta;\Gamma \vdash \textrm{case} \ s \ \textrm{of} \ \{ - p_1 \mid g_1 \rightarrow t_1; - \ldots; - p_n \mid g_n \rightarrow t_n - \} \uparrow B } - -\end{mathpar} -\caption{Basics.} -\label{fig:basics} -\end{figure} - -\begin{figure} -\begin{mathpar} - -\inferrule[Record type] -{ \Delta;\Gamma \vdash T_1 \uparrow Type \\ - \ldots \\ - \Delta;\Gamma, l_1 : T_1, \ldots, l_{n-1} : T_{n-1} \vdash T_n \uparrow Type \\ - l_1 \ldots l_n \ \textrm{different} -} -{ \Delta;\Gamma \vdash \textrm{sig} \{ l_1 : T_1, \ldots, l_n : T_n \} \uparrow Type } - -\and - -\inferrule[Record] -{ \Delta;\Gamma \vdash t_1 \uparrow T_1 \\ - \ldots \\ - \Delta;\Gamma \vdash t_n \uparrow T_n [l_{n-1} / t_{n-1}] \ldots [l_1 / t_1] \\ - l_1 \ldots l_n \ \textrm{different} } -{ \Delta;\Gamma \vdash \textrm{rec} \{ l_1 = t_1, \ldots, l_n = t_n \} - \uparrow \textrm{sig} \{ l_1 : T_1, \ldots, l_n : T_n \} } - -\and - -\inferrule[Record projection] -{ \Delta;\Gamma \vdash t \downarrow \textrm{sig} \{ l : T \} } -{ \Delta;\Gamma \vdash t . l \uparrow T } - -\end{mathpar} -\caption{Records.} -\label{fig:records} -\end{figure} - - -\begin{figure} -\begin{mathpar} - -\inferrule[Variable pattern] -{ } -{ \Delta \vdash_p x \downarrow \ A; \{ x : A \} } - -\and - -\inferrule[Wildcard pattern] -{ } -{ \Delta \vdash_p \_ \ \downarrow \ A; \{ \} } - -\and - -\inferrule[Constructor pattern] -{ c : (x_1 : T_1) \rightarrow \ldots \rightarrow (x_n : T_n) \rightarrow T' \in \Delta \\ - T' = T \\ - \Delta \vdash_p p_1 \downarrow T_1; \Gamma_1 \\ - \ldots \\ - \Delta \vdash_p p_n \downarrow T_n; \Gamma_n \\ - \Gamma_1 \ldots \Gamma_n \ \textrm{disjoint} \\ - \textrm{FIXME: $x_k$ can occur in $T_{k+1}$} - } -{ \Delta \vdash_p c \ p_1 \ldots p_n \ \downarrow \ T; \Gamma_1, \ldots, \Gamma_n } - -\and - -\inferrule[Record pattern] -{ \textrm{FIXME: allow more fields in type, ignore order} \\ - \textrm{FIXME: types can depend on field values} \\ -\Delta \vdash_p p_1 \ \downarrow \ T_1; \Gamma_1 \\ - \ldots \\ - \Delta \vdash_p p_n \ \downarrow \ T_n; \Gamma_n \\ - \Gamma_1 \ldots \Gamma_n \ \textrm{disjoint} \\ - l_1 \ldots l_n \ \textrm{different} - } -{ \Delta \vdash_p \textrm{rec} \ \{ l_1 = p_1; \ldots; l_n = p_n \} \ \downarrow \ - \textrm{sig} \ \{ l_1 : T_1; \ldots; l_n : T_n \}; \Gamma_1, \ldots, \Gamma_n } - -\and - -\inferrule[Integer literal pattern] -{ } -{ \Delta \vdash_p integer \ \downarrow \ Integer; \{ \} } - -\and - -\inferrule[String literal pattern] -{ } -{ \Delta \vdash_p string \ \downarrow \ String; \{ \} } - -\and - -\end{mathpar} -\caption{Type-checking patterns.} -\label{fig:typing-patterns} -\end{figure} - - - - - -\begin{figure} -\begin{mathpar} - -\inferrule[Integer type] -{ } -{ \Delta;\Gamma \vdash Integer \uparrow Type } - -\and - -\inferrule[Integer literal] -{ } -{ \Delta;\Gamma \vdash integer \uparrow Integer } - -\and - -\inferrule[Double type] -{ } -{ \Delta;\Gamma \vdash Double \uparrow Type } - -\and - -\inferrule[Double literal] -{ } -{ \Delta;\Gamma \vdash double \uparrow Double } - -\and - -\inferrule[String type] -{ } -{ \Delta;\Gamma \vdash String \uparrow Type } - -\and - -\inferrule[String literal] -{ } -{ \Delta;\Gamma \vdash string \uparrow String } - -\end{mathpar} -\caption{Primitive types.} -\label{fig:primitive-types} -\end{figure} - -\begin{figure} -\begin{mathpar} - -\inferrule[Subtype conversion] -{ \vdash s \Downarrow_{wh} s' \\ - \vdash t \Downarrow_{wh} t' \\ - s' \leq t' } -{ s \lesssim t } - -\and - -\inferrule[Function type conversion] -{ A_2 \lesssim A_1 \\ - B_1 [x_1/z] \lesssim B_2 [x_2/z] } -{ (x_1 : A_1) \rightarrow B_1 - \leq (x_2 : A_2) \rightarrow B_2 } - -\and - -\inferrule[Constructor conversion] -{ s_1 \lesssim t_1 \\ - \ldots \\ - s_n \lesssim t_n \\ -} -{ c \ s_1 \ldots s_n \leq c \ t_1 \ldots t_n } - -\and - -\inferrule[Record type conversion] -{ A_1 \lesssim B_1 \ldots A_n \lesssim B_n \\ - \textrm{FIXME: types can depend on fields} \\ - \textrm{FIXME: allow more fields on the left, ignore order} } -{ \textrm{sig} \ \{ l_1 : A_1 \ldots l_n : A_n \} - \leq - \textrm{sig} \ \{ k_1 : B_1 \ldots k_m : B_m \} } - -\and - -\inferrule[Record conversion] -{ - \textrm{FIXME: allow more fields on the left, ignore order} \\ - s_1 \lesssim t_1 \ldots s_n \lesssim s_n -} -{ \textrm{rec} \ \{ l_1 = s_1 \ldots l_n = s_n \} - \leq - \textrm{rec} \ \{ k_1 = t_1 \ldots k_m = t_m \} } - -\and - -\inferrule[Integer conversion] -{ i_1 \ \textrm{integer} \\ - i_2 \ \textrm{integer} \\ - i_1 =_{integer} i_2} -{ i_1 \leq i_2 } - -\and - -\inferrule[String conversion] -{ i_1 \ \textrm{string} \\ - i_2 \ \textrm{string} \\ - i_1 =_{string} i_2} -{ i_1 \leq i_2 } - -\and - -\inferrule[Double conversion] -{ i_1 \ \textrm{double} \\ - i_2 \ \textrm{double} \\ - i_1 =_{double} i_2} -{ i_1 \leq i_2 } - -\end{mathpar} -\caption{Conversion and subtyping.} -\label{fig:conversion} -\end{figure} - -\begin{figure} -\begin{mathpar} - -\inferrule[WHNF-Let] -{ s \Downarrow_{wh} s' \\ - \textrm{This is a weird way to evaluate a let} } -{ \Gamma \vdash \textrm{let} \ x = s \ \textrm{in} \ t - \Downarrow_{wh} t [x/s'] -} - -\and - -\inferrule[WHNF-Case] -{ \textrm{FIXME: find the right case arm} \\ - \textrm{FIXME: bind / substitute variables in RHS} } -{ \Gamma \vdash \textrm{case} \ s \ \textrm{of} \{ \overline{p \mid t \rightarrow u} \} - \Downarrow_{wh} -} - -\and - -\inferrule[WHNF-Beta] -{ \Gamma \vdash s \Downarrow_{wh} \lambda x . s' \\ - \Gamma \vdash t \Downarrow_{wh} t' } -{ \Gamma \vdash s \ t \Downarrow_{wh} s' [x/t'] \} -} - -\and - -\inferrule[WHNF-Proj] -{ \Gamma \vdash s \Downarrow_{wh} \textrm{rec} \ \{ \ldots, l = t, \ldots \} } -{ \Gamma \vdash s.l \Downarrow_{wh} t } - -\and - -\inferrule[WHNF-Var] -{ x = t \in \Gamma \\ - \textrm{FIXME: there shouldn't be any free variables (but there can be functions and constructors)} } -{ \Gamma \vdash x \Downarrow_{wh} t } - - -% unchanged: - -\and - -\inferrule[WHNF-Lambda] -{ } -{ \Gamma \vdash \lambda x . t \Downarrow_{wh} \lambda x . t } - -\and - -\inferrule[WHNF-Pi] -{ } -{ \Gamma \vdash (x : s) \rightarrow t \Downarrow_{wh} (x : s) \rightarrow t -} - -\and - -\inferrule[WHNF-Sig] -{ } -{ \Gamma \vdash \textrm{sig} \ \{ l_1 : A_1, \ldots, l_n : A_n \} - \Downarrow_{wh} \textrm{sig} \ \{ l_1 : A_1, \ldots, l_n : A_n \} } - -\and - -\inferrule[WHNF-Rec] -{ } -{ \Gamma \vdash \textrm{rec} \ \{ l_1 = t_1, \ldots, l_n = t_n \} - \Downarrow_{wh} \textrm{rec} \ \{ l_1 = t_1, \ldots, l_n = t_n \} } - -\and - -\inferrule[WHNF-Type] -{ } -{ \Gamma \vdash Type \Downarrow_{wh} Type } - -\and - -\inferrule[WHNF-String] -{ } -{ \Gamma \vdash string \Downarrow_{wh} string } - -\and - -\inferrule[WHNF-Integer] -{ } -{ \Gamma \vdash integer \Downarrow_{wh} integer } - -\and - -\inferrule[WHNF-Double] -{ } -{ \Gamma \vdash double \Downarrow_{wh} double } - -% FIXME: applications which are not beta redexes? - - - - -\end{mathpar} -\caption{Weak head normal form evaluation.} -\label{fig:whnf-evaluation} -\end{figure} - - - -\end{document} diff --git a/transfer/examples/aggregation/Abstract.gf b/transfer/examples/aggregation/Abstract.gf deleted file mode 100644 index 9d8b31d0d..000000000 --- a/transfer/examples/aggregation/Abstract.gf +++ /dev/null @@ -1,24 +0,0 @@ --- testing transfer: aggregation by def definitions. AR 12/4/2003 -- 9/10 - --- p "Mary runs or John runs and John walks" | l -transfer=Aggregation --- Mary runs or John runs and walks --- Mary or John runs and John walks - --- The two results are due to ambiguity in parsing. Thus it is not spurious! - -abstract Abstract = { - -cat - S ; NP ; VP ; Conj ; - -fun - Pred : NP -> VP -> S ; - ConjS : Conj -> S -> S -> S ; - ConjVP : Conj -> VP -> VP -> VP ; - ConjNP : Conj -> NP -> NP -> NP ; - - John, Mary, Bill : NP ; - Walk, Run, Swim : VP ; - And, Or : Conj ; - -} diff --git a/transfer/examples/aggregation/English.gf b/transfer/examples/aggregation/English.gf deleted file mode 100644 index 53199787b..000000000 --- a/transfer/examples/aggregation/English.gf +++ /dev/null @@ -1,41 +0,0 @@ -concrete English of Abstract = { - -lincat - VP = {s : Num => Str} ; - NP, Conj = {s : Str ; n : Num} ; - -lin - Pred np vp = ss (np.s ++ vp.s ! np.n) ; - ConjS c A B = ss (A.s ++ c.s ++ B.s) ; - ConjVP c A B = {s = \\n => A.s ! n ++ c.s ++ B.s ! n} ; - ConjNP c A B = {s = A.s ++ c.s ++ B.s ; n = c.n} ; - - John = pn "John" ; - Mary = pn "Mary" ; - Bill = pn "Bill" ; - Walk = vp "walk" ; - Run = vp "run" ; - Swim = vp "swim" ; - - And = {s = "and" ; n = Pl} ; - Or = pn "or" ; - -param - Num = Sg | Pl ; - -oper - vp : Str -> {s : Num => Str} = \run -> { - s = table { - Sg => run + "s" ; - Pl => run - } - } ; - - pn : Str -> {s : Str ; n : Num} = \bob -> { - s = bob ; - n = Sg - } ; - - ss : Str -> {s : Str} = \s -> {s = s} ; - -} diff --git a/transfer/examples/aggregation/aggregate.tra b/transfer/examples/aggregation/aggregate.tra deleted file mode 100644 index b71ccfef2..000000000 --- a/transfer/examples/aggregation/aggregate.tra +++ /dev/null @@ -1,56 +0,0 @@ -import prelude -import tree - - --- aggreg specialized for Tree S -aggregS : Tree S -> Tree S -aggregS = aggreg S - --- For now, here's what we have to do: -aggreg : (A : Type) -> Tree A -> Tree A -aggreg _ t = - case t of - ConjS c s1 s2 -> - case (aggreg ? s1, aggreg ? s2) of - (Pred np1 vp1, Pred np2 vp2) | eq NP (eq_Tree NP) np1 np2 -> - Pred np1 (ConjVP c vp1 vp2) - (Pred np1 vp1, Pred np2 vp2) | eq VP (eq_Tree VP) vp1 vp2 -> - Pred (ConjNP c np1 np2) vp1 - (s1',s2') -> ConjS c s1' s2' - _ -> composOp ? ? compos_Tree ? aggreg t - - - - - -{- --- When the Transfer compiler gets meta variable inference, --- we can write this: -aggreg : (A : Type) -> Tree A -> Tree A -aggreg _ t = - case t of - ConjS c s1 s2 -> - case (aggreg ? s1, aggreg ? s2) of - (Pred np1 vp1, Pred np2 vp2) | np1 == np2 -> - Pred np1 (ConjVP c vp1 vp2) - (Pred np1 vp1, Pred np2 vp2) | vp1 == vp2 -> - Pred (ConjNP c np1 np2) vp1 - (s1',s2') -> ConjS c s1' s2' - _ -> composOp ? ? ? ? aggreg t --} - - -{- --- If we added idden arguments, we could write something like this: -aggreg : (A : Type) => Tree A -> Tree A -aggreg t = - case t of - ConjS c s1 s2 -> - case (aggreg s1, aggreg s2) of - (Pred np1 vp1, Pred np2 vp2) | np1 == np2 -> - Pred np1 (ConjVP c vp1 vp2) - (Pred np1 vp1, Pred np2 vp2) | vp1 == vp2 -> - Pred (ConjNP c np1 np2) vp1 - (s1',s2') -> ConjS c s1' s2' - _ -> composOp aggreg t --} diff --git a/transfer/examples/aggregation/tree.tra b/transfer/examples/aggregation/tree.tra deleted file mode 100644 index 5515efa21..000000000 --- a/transfer/examples/aggregation/tree.tra +++ /dev/null @@ -1,23 +0,0 @@ -import prelude ; -data Cat : Type where { - Conj : Cat ; - NP : Cat ; - S : Cat ; - VP : Cat -} ; -data Tree : Cat -> Type where { - And : Tree Conj ; - Bill : Tree NP ; - ConjNP : Tree Conj -> Tree NP -> Tree NP -> Tree NP ; - ConjS : Tree Conj -> Tree S -> Tree S -> Tree S ; - ConjVP : Tree Conj -> Tree VP -> Tree VP -> Tree VP ; - John : Tree NP ; - Mary : Tree NP ; - Or : Tree Conj ; - Pred : Tree NP -> Tree VP -> Tree S ; - Run : Tree VP ; - Swim : Tree VP ; - Walk : Tree VP -} ; -derive Eq Tree ; -derive Compos Tree ; diff --git a/transfer/examples/disjpatt.tra b/transfer/examples/disjpatt.tra deleted file mode 100644 index 740e08a7b..000000000 --- a/transfer/examples/disjpatt.tra +++ /dev/null @@ -1,24 +0,0 @@ -data Cat : Type where - VarOrWild : Cat - Exp : Cat - Ident : Cat - -data Tree : Cat -> Type where - EAbs : Tree VarOrWild -> Tree Exp -> Tree Exp - EPi : Tree VarOrWild -> Tree Exp -> Tree Exp -> Tree Exp - EVar : Tree Ident -> Tree Exp - EType : Tree Exp - EStr : String -> Tree Exp - EInt : Integer -> Tree Exp - VVar : Tree Ident -> Tree VarOrWild - VWild : Tree VarOrWild - Ident : String -> Tree Ident - - -f e = case e of - EAbs (VWild || VVar _) e || EPi (VWild || VVar _) _ e -> doSomething e - Ident i -> Ident i - _ -> catchAll - - -g (Ident x || EAbs (VWild || VVar _) t e) = x e \ No newline at end of file diff --git a/transfer/examples/exp.tra b/transfer/examples/exp.tra deleted file mode 100644 index e54b82055..000000000 --- a/transfer/examples/exp.tra +++ /dev/null @@ -1,33 +0,0 @@ -import prelude - -data Cat : Type where - Stm : Cat - Exp : Cat - Var : Cat - Typ : Cat - ListStm : Cat - -data Tree : Cat -> Type where - SDecl : Tree Typ -> Tree Var -> Tree Stm - SAss : Tree Var -> Tree Exp -> Tree Stm - SBlock : Tree ListStm -> Tree Stm - EAdd : Tree Exp -> Tree Exp -> Tree Exp - EStm : Tree Stm -> Tree Exp - EVar : Tree Var -> Tree Exp - EInt : Integer -> Tree Exp - V : String -> Tree Var - TInt : Tree Typ - TFloat : Tree Typ - - NilStm : Tree ListStm - ConsStm : Tree Stm -> Tree ListStm -> Tree ListStm - -derive Compos Tree - -rename : (String -> String) -> (C : Type) -> Tree C -> Tree C -rename f C t = case t of - V x -> V (f x) - _ -> composOp ? ? compos_Tree C (rename f) t - - -main = rename (const ? ? "apa") Stm (SAss (V "y") (EAdd (EVar (V "x")) (EInt 2))) \ No newline at end of file diff --git a/transfer/examples/fib.tra b/transfer/examples/fib.tra deleted file mode 100644 index 43e533b1f..000000000 --- a/transfer/examples/fib.tra +++ /dev/null @@ -1,12 +0,0 @@ -import nat -import prelude - -fib : Integer -> Integer -fib 0 = 1 -fib 1 = 1 -fib n = fib (n-1) + fib (n-2) - -fibNat : Nat -> Nat -fibNat Zero = Succ Zero -fibNat (Succ Zero) = Succ Zero -fibNat (Succ (Succ n)) = plus Nat add_Nat (fibNat (Succ n)) (fibNat n) \ No newline at end of file diff --git a/transfer/examples/layout.tra b/transfer/examples/layout.tra deleted file mode 100644 index 8c2d9aa3f..000000000 --- a/transfer/examples/layout.tra +++ /dev/null @@ -1,9 +0,0 @@ -x : Apa -x = let x = y - in case y of - f -> q - _ -> a - -f = apa - -g = bepa \ No newline at end of file diff --git a/transfer/examples/list.tra b/transfer/examples/list.tra deleted file mode 100644 index 253c29e02..000000000 --- a/transfer/examples/list.tra +++ /dev/null @@ -1,6 +0,0 @@ -import prelude - -l1 = append ? [1,2,3,5,6] [3] -l2 = 2 :: l1 - -main = rec { x = length ? l2; y = l2} diff --git a/transfer/examples/numerals.tra b/transfer/examples/numerals.tra deleted file mode 100644 index 2c2718130..000000000 --- a/transfer/examples/numerals.tra +++ /dev/null @@ -1,94 +0,0 @@ -import prelude - -data Cat : Type where { - Digit : Cat ; - Numeral : Cat ; - Sub10 : Cat ; - Sub100 : Cat ; - Sub1000 : Cat ; - Sub1000000 : Cat -} ; - -data Tree : (_ : Cat)-> Type where { - n2 : Tree Digit ; - n3 : Tree Digit ; - n4 : Tree Digit ; - n5 : Tree Digit ; - n6 : Tree Digit ; - n7 : Tree Digit ; - n8 : Tree Digit ; - n9 : Tree Digit ; - num : (_ : Tree Sub1000000)-> Tree Numeral ; - pot0 : (_ : Tree Digit)-> Tree Sub10 ; - pot01 : Tree Sub10 ; - pot0as1 : (_ : Tree Sub10)-> Tree Sub100 ; - pot1 : (_ : Tree Digit)-> Tree Sub100 ; - pot110 : Tree Sub100 ; - pot111 : Tree Sub100 ; - pot1as2 : (_ : Tree Sub100)-> Tree Sub1000 ; - pot1plus : (_ : Tree Digit)-> (_ : Tree Sub10)-> Tree Sub100 ; - pot1to19 : (_ : Tree Digit)-> Tree Sub100 ; - pot2 : (_ : Tree Sub10)-> Tree Sub1000 ; - pot2as3 : (_ : Tree Sub1000)-> Tree Sub1000000 ; - pot2plus : (_ : Tree Sub10)-> (_ : Tree Sub100)-> Tree Sub1000 ; - pot3 : (_ : Tree Sub1000)-> Tree Sub1000000 ; - pot3plus : (_ : Tree Sub1000)-> (_ : Tree Sub1000)-> Tree Sub1000000 -} - -derive Compos Tree - - -data Binary_Cat : Type where { - Bin : Binary_Cat -} ; -data Binary_Tree : (_ : Binary_Cat)-> Type where { - End : Binary_Tree Bin ; - One : (_ : Binary_Tree Bin)-> Binary_Tree Bin ; - Zero : (_ : Binary_Tree Bin)-> Binary_Tree Bin -} - - - -monoid_plus_Int : Monoid Integer -monoid_plus_Int = rec mzero = 0 - mplus = (\x -> \y -> x + y) - - -num2int : Tree Numeral -> Integer -num2int = tree2int ? - -tree2int : (C : Cat) -> Tree C -> Integer -tree2int _ n = case n of - n2 -> 2 - n3 -> 3 - n4 -> 4 - n5 -> 5 - n6 -> 6 - n7 -> 7 - n8 -> 8 - n9 -> 9 - pot01 -> 1 - pot1 x -> 10 * tree2int ? x - pot110 -> 10 - pot111 -> 11 - pot1plus x y -> 10 * tree2int ? x + tree2int ? y - pot1to19 x -> 10 + tree2int ? x - pot2 x -> 100 * tree2int ? x - pot2as3 x -> 10 * tree2int ? x - pot2plus x y -> 100 * tree2int ? x + tree2int ? y - pot3 x -> 1000 * tree2int ? x - pot3plus x y -> 1000 * tree2int ? x + tree2int ? y - _ -> composFold ? ? compos_Tree ? monoid_plus_Int C tree2int n - -int2bin : Integer -> Binary_Tree Bin -int2bin = int2bin_ End - -int2bin_ : Binary_Tree Bin -> Integer -> Binary_Tree Bin -int2bin_ b 0 = b -int2bin_ b n = let d = if n % 2 == 0 then Zero else One - q = n / 2 - in int2bin_ (d b) q - -num2bin : Tree Numeral -> Binary_Tree Bin -num2bin n = int2bin (num2int n) - diff --git a/transfer/examples/reflexive/Abstract.gf b/transfer/examples/reflexive/Abstract.gf deleted file mode 100644 index 0426defdc..000000000 --- a/transfer/examples/reflexive/Abstract.gf +++ /dev/null @@ -1,15 +0,0 @@ -abstract Abstract = { - -cat - S ; NP ; V2 ; Conj ; - -fun - PredV2 : V2 -> NP -> NP -> S ; - ReflV2 : V2 -> NP -> S ; - ConjNP : Conj -> NP -> NP -> NP ; - - And, Or : Conj ; - John, Mary, Bill : NP ; - See, Whip : V2 ; - -} diff --git a/transfer/examples/reflexive/English.gf b/transfer/examples/reflexive/English.gf deleted file mode 100644 index 73fa00e91..000000000 --- a/transfer/examples/reflexive/English.gf +++ /dev/null @@ -1,54 +0,0 @@ -concrete English of Abstract = { - -lincat - S = { s : Str } ; - V2 = {s : Num => Str} ; - Conj = {s : Str ; n : Num} ; - NP = {s : Str ; n : Num; g : Gender} ; - -lin - PredV2 v s o = ss (s.s ++ v.s ! s.n ++ o.s) ; - ReflV2 v s = ss (s.s ++ v.s ! s.n ++ self ! s.n ! s.g) ; - -- FIXME: what is the gender of "Mary or Bill"? - ConjNP c A B = {s = A.s ++ c.s ++ B.s ; n = c.n; g = A.g } ; - - John = pn Masc "John" ; - Mary = pn Fem "Mary" ; - Bill = pn Masc "Bill" ; - See = regV2 "see" ; - Whip = regV2 "whip" ; - - And = {s = "and" ; n = Pl } ; - Or = { s = "or"; n = Sg } ; - -param - Num = Sg | Pl ; - Gender = Neutr | Masc | Fem ; - -oper - regV2 : Str -> {s : Num => Str} = \run -> { - s = table { - Sg => run + "s" ; - Pl => run - } - } ; - - self : Num => Gender => Str = - table { - Sg => table { - Neutr => "itself"; - Masc => "himself"; - Fem => "herself" - }; - Pl => \\g => "themselves" - }; - - pn : Gender -> Str -> {s : Str ; n : Num; g : Gender} = \gen -> \bob -> { - s = bob ; - n = Sg ; - g = gen - } ; - - ss : Str -> {s : Str} = \s -> {s = s} ; - -} diff --git a/transfer/examples/reflexive/reflexive.tra b/transfer/examples/reflexive/reflexive.tra deleted file mode 100644 index 8d28f0db0..000000000 --- a/transfer/examples/reflexive/reflexive.tra +++ /dev/null @@ -1,40 +0,0 @@ -{- - -$ ../../transferc -i../../lib reflexive.tra - -$ gf English.gf reflexive.trc - -> p -tr "John sees John" | at -tr reflexivize_S | l -PredV2 See John John -ReflV2 See John -John sees himself - -> p -tr "John and Bill see John and Bill" | at -tr reflexivize_S | l -PredV2 See (ConjNP And John Bill) (ConjNP And John Bill) -ReflV2 See (ConjNP And John Bill) -John and Bill see themselves - -> p -tr "John sees Mary" | at -tr reflexivize_S | l -PredV2 See John Mary -PredV2 See John Mary -John sees Mary - --} - -import tree - -reflexivize : (C : Cat) -> Tree C -> Tree C -reflexivize _ (PredV2 v s o) | eq ? (eq_Tree ?) s o = ReflV2 v s -reflexivize _ t = composOp ? ? compos_Tree ? reflexivize t - -reflexivize_S : Tree S -> Tree S -reflexivize_S = reflexivize S - -{- -With a type checker and hidden arguments we could write: - -reflexivize : {C : Cat} -> Tree C -> Tree C -reflexivize (PredV2 v s o) | s == o = ReflV2 v s -reflexivize t = composOp reflexivize t - --} \ No newline at end of file diff --git a/transfer/examples/reflexive/tree.tra b/transfer/examples/reflexive/tree.tra deleted file mode 100644 index 7bef5e019..000000000 --- a/transfer/examples/reflexive/tree.tra +++ /dev/null @@ -1,21 +0,0 @@ -import prelude ; -data Cat : Type where { - Conj : Cat ; - NP : Cat ; - S : Cat ; - V2 : Cat -} ; -data Tree : Cat -> Type where { - And : Tree Conj ; - Bill : Tree NP ; - ConjNP : Tree Conj -> Tree NP -> Tree NP -> Tree NP ; - John : Tree NP ; - Mary : Tree NP ; - Or : Tree Conj ; - PredV2 : Tree V2 -> Tree NP -> Tree NP -> Tree S ; - ReflV2 : Tree V2 -> Tree NP -> Tree S ; - See : Tree V2 ; - Whip : Tree V2 -} ; -derive Eq Tree ; -derive Compos Tree ; diff --git a/transfer/examples/stoneage.tra b/transfer/examples/stoneage.tra deleted file mode 100644 index e48c519e6..000000000 --- a/transfer/examples/stoneage.tra +++ /dev/null @@ -1,210 +0,0 @@ -import prelude - -data Cat : Type where { - CN : Cat ; - NP : Cat ; - S : Cat -} ; -data Tree : (_ : Cat)-> Type where { - A : (h_ : Tree CN)-> Tree NP ; - All : (h_ : Tree CN)-> Tree NP ; - Animal : Tree CN ; - Ashes : Tree CN ; - Back : Tree CN ; - Bad : (h_ : Tree CN)-> Tree CN ; - Bark : Tree CN ; - Belly : Tree CN ; - Big : (h_ : Tree CN)-> Tree CN ; - Bird : Tree CN ; - Bite : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Black : (h_ : Tree CN)-> Tree CN ; - Blood : Tree CN ; - Blow : (h_ : Tree NP)-> Tree S ; - Bone : Tree CN ; - Breast : Tree CN ; - Breathe : (h_ : Tree NP)-> Tree S ; - Burn : (h_ : Tree NP)-> Tree S ; - Child : Tree CN ; - Cloud : Tree CN ; - Cold : (h_ : Tree CN)-> Tree CN ; - Come : (h_ : Tree NP)-> Tree S ; - Correct : (h_ : Tree CN)-> Tree CN ; - Count : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Cut : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Day : Tree CN ; - Die : (h_ : Tree NP)-> Tree S ; - Dig : (h_ : Tree NP)-> Tree S ; - Dirty : (h_ : Tree CN)-> Tree CN ; - Dog : Tree CN ; - Drink : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Dry : (h_ : Tree CN)-> Tree CN ; - Dull : (h_ : Tree CN)-> Tree CN ; - Dust : Tree CN ; - Ear : Tree CN ; - Earth : Tree CN ; - Eat : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Egg : Tree CN ; - Eye : Tree CN ; - Fall : (h_ : Tree NP)-> Tree S ; - Fat : Tree CN ; - Father : Tree CN ; - FatherOf : (h_ : Tree NP)-> Tree CN ; - Fear : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Feather : Tree CN ; - Few : (h_ : Tree CN)-> Tree NP ; - Fight : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Fingernail : Tree CN ; - Fire : Tree CN ; - Fish : Tree CN ; - Five : (h_ : Tree CN)-> Tree NP ; - Float : (h_ : Tree NP)-> Tree S ; - Flow : (h_ : Tree NP)-> Tree S ; - Flower : Tree CN ; - Fly : (h_ : Tree NP)-> Tree S ; - Fog : Tree CN ; - Foot : Tree CN ; - Forest : Tree CN ; - Four : (h_ : Tree CN)-> Tree NP ; - Freeze : (h_ : Tree NP)-> Tree S ; - Fruit : Tree CN ; - Full : (h_ : Tree CN)-> Tree CN ; - Give : (h_ : Tree NP)-> (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Good : (h_ : Tree CN)-> Tree CN ; - Grass : Tree CN ; - Green : (h_ : Tree CN)-> Tree CN ; - Guts : Tree CN ; - Hair : Tree CN ; - Hand : Tree CN ; - He : Tree NP ; - Head : Tree CN ; - Hear : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Heart : Tree CN ; - Heavy : (h_ : Tree CN)-> Tree CN ; - Hit : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Hold : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Horn : Tree CN ; - Hunt : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Husband : Tree CN ; - I : Tree NP ; - Ice : Tree CN ; - Kill : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Knee : Tree CN ; - Know : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Lake : Tree CN ; - Laugh : (h_ : Tree NP)-> Tree S ; - Leaf : Tree CN ; - Left : (h_ : Tree CN)-> Tree CN ; - Leg : Tree CN ; - Lie : (h_ : Tree NP)-> Tree S ; - Live : (h_ : Tree NP)-> Tree S ; - Liver : Tree CN ; - Long : (h_ : Tree CN)-> Tree CN ; - Louse : Tree CN ; - Man : Tree CN ; - Many : (h_ : Tree CN)-> Tree NP ; - Meat : Tree CN ; - Moon : Tree CN ; - Mother : Tree CN ; - MotherOf : (h_ : Tree NP)-> Tree CN ; - Mountain : Tree CN ; - Mouth : Tree CN ; - Name : Tree CN ; - Narrow : (h_ : Tree CN)-> Tree CN ; - Near : (h_ : Tree CN)-> Tree CN ; - Neck : Tree CN ; - New : (h_ : Tree CN)-> Tree CN ; - Night : Tree CN ; - Nose : Tree CN ; - Old : (h_ : Tree CN)-> Tree CN ; - One : (h_ : Tree CN)-> Tree NP ; - Other : (h_ : Tree CN)-> Tree NP ; - Person : Tree CN ; - Play : (h_ : Tree NP)-> Tree S ; - Pull : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Push : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Rain : Tree CN ; - Red : (h_ : Tree CN)-> Tree CN ; - Right : (h_ : Tree CN)-> Tree CN ; - River : Tree CN ; - Road : Tree CN ; - Root : Tree CN ; - Rope : Tree CN ; - Rotten : (h_ : Tree CN)-> Tree CN ; - Round : (h_ : Tree CN)-> Tree CN ; - Rub : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Salt : Tree CN ; - Sand : Tree CN ; - Scratch : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Sea : Tree CN ; - See : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Seed : Tree CN ; - Sew : (h_ : Tree NP)-> Tree S ; - Sharp : (h_ : Tree CN)-> Tree CN ; - Short : (h_ : Tree CN)-> Tree CN ; - Sing : (h_ : Tree NP)-> Tree S ; - Sit : (h_ : Tree NP)-> Tree S ; - Skin : Tree CN ; - Sky : Tree CN ; - Sleep : (h_ : Tree NP)-> Tree S ; - Small : (h_ : Tree CN)-> Tree CN ; - Smell : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Smoke : Tree CN ; - Smooth : (h_ : Tree CN)-> Tree CN ; - Snake : Tree CN ; - Snow : Tree CN ; - Some_Many : (h_ : Tree CN)-> Tree NP ; - Some_One : (h_ : Tree CN)-> Tree NP ; - Spit : (h_ : Tree NP)-> Tree S ; - Split : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Squeeze : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Stab : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Stand : (h_ : Tree NP)-> Tree S ; - Star : Tree CN ; - Stick : Tree CN ; - Stone : Tree CN ; - Straight : (h_ : Tree CN)-> Tree CN ; - Suck : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Sun : Tree CN ; - Swell : (h_ : Tree NP)-> Tree S ; - Swim : (h_ : Tree NP)-> Tree S ; - Tail : Tree CN ; - That : (h_ : Tree CN)-> Tree NP ; - The_Many : (h_ : Tree CN)-> Tree NP ; - The_One : (h_ : Tree CN)-> Tree NP ; - They : Tree NP ; - Thick : (h_ : Tree CN)-> Tree CN ; - Thin : (h_ : Tree CN)-> Tree CN ; - Think : (h_ : Tree NP)-> Tree S ; - This : (h_ : Tree CN)-> Tree NP ; - Three : (h_ : Tree CN)-> Tree NP ; - Throw : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Tie : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Tongue : Tree CN ; - Tooth : Tree CN ; - Tree : Tree CN ; - Turn : (h_ : Tree NP)-> Tree S ; - Two : (h_ : Tree CN)-> Tree NP ; - Vomit : (h_ : Tree NP)-> Tree S ; - Walk : (h_ : Tree NP)-> Tree S ; - Warm : (h_ : Tree CN)-> Tree CN ; - Wash : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Water : Tree CN ; - We : Tree NP ; - Wet : (h_ : Tree CN)-> Tree CN ; - White : (h_ : Tree CN)-> Tree CN ; - Wide : (h_ : Tree CN)-> Tree CN ; - Wife : Tree CN ; - Wind : Tree CN ; - Wing : Tree CN ; - Wipe : (h_ : Tree NP)-> (h_ : Tree NP)-> Tree S ; - Woman : Tree CN ; - Worm : Tree CN ; - Year : Tree CN ; - Yellow : (h_ : Tree CN)-> Tree CN ; - You_Many : Tree NP ; - You_One : Tree NP -} - -derive Compos Tree - -derive Eq Tree \ No newline at end of file diff --git a/transfer/examples/test.tra b/transfer/examples/test.tra deleted file mode 100644 index bfd303ee5..000000000 --- a/transfer/examples/test.tra +++ /dev/null @@ -1,4 +0,0 @@ -import nat -import fib - -main = (\x -> (\x -> \x -> x) 1 x) 5 diff --git a/transfer/examples/tricky-type-checking.tra b/transfer/examples/tricky-type-checking.tra deleted file mode 100644 index ad69c33db..000000000 --- a/transfer/examples/tricky-type-checking.tra +++ /dev/null @@ -1,37 +0,0 @@ - --- --- Pattern matching and inductive families. --- - -data Tree : Type -> Type where - EAdd : Tree Integer -> Tree Integer -> Tree Integer - EInt : Integer -> Tree Integer - EFoo : (A:Type) -> A -> Tree A - -eval : (B : Type) -> Tree B -> Tree B -eval _ t = case t of - EAdd x y -> EInt (x+y) - EInt i -> EInt i - EFoo T x -> EFoo T x - -strip : (B : Type) -> Tree B -> B -strip _ t = case t of - EAdd x y -> x+y - EInt i -> i - EFoo _ x -> x - --- --- Subtyping --- - -getX : { x : Integer } -> Integer -getX r = r.x - -getY : { y : Integer } -> Integer -getY r = r.y - -proj2 : (A:Type) -> (B:Type) -> (C:Type) -> (A -> B) -> (A -> C) -> A -> (B,C) -proj2 _ _ _ f g x = (f x, g x) - -getXY : { x : Integer, y : Integer } -> (Integer,Integer) -getXY r = proj2 ? ? ? getX getY r diff --git a/transfer/examples/widesnake.tra b/transfer/examples/widesnake.tra deleted file mode 100644 index f68ed9013..000000000 --- a/transfer/examples/widesnake.tra +++ /dev/null @@ -1,21 +0,0 @@ -import bool -import stoneage - -monoid_Bool : sig { zero : Bool; plus : Bool -> Bool -> Bool } -monoid_Bool = rec - zero = False - plus = \x -> \y -> x && y - -isSnake : (A : Tree) -> Tree A -> Bool -isSnake _ x = case x of - Snake -> True - _ -> composFold ? ? compos_Tree Bool monoid_Bool ? isSnake x - -wideSnake : (A : Cat) -> Tree A -> Tree A -wideSnake _ x = case x of - Wide y -> let y' = wideSnake ? y - in if isSnake CN y' then Thick y' else Wide y' - _ -> composOp ? ? compos_Tree ? wideSnake x - -wideSnakeNP : Tree NP -> Tree NP -wideSnakeNP = wideSnake NP diff --git a/transfer/lib/bintree.tra b/transfer/lib/bintree.tra deleted file mode 100644 index 0dd21f184..000000000 --- a/transfer/lib/bintree.tra +++ /dev/null @@ -1,22 +0,0 @@ --- NOTE: this is unfinished and untested - -import prelude - -data BinTree : Type -> Type where - Leaf : (A:Type) -> BinTree A - Node : (A:Type) -> BinTree A -> A -> BinTree A -> BinTree A - -contains : (A:Type) -> Ord A -> A -> BinTree A -> Bool -contains _ _ _ (Leaf _) = False -contains A o x (Node _ l y r) - | x < y = contains A o x l - | x > y = contains A o x r - | otherwise = True - -insert : (A:Type) -> Ord A -> A -> BinTree A -> BinTree A -insert A o x (Leaf _) = Node A (Leaf A) x (Leaf A) -insert A o x (Node _ l y r) - | x < y = Node A (insert A o x l) y r - | x > y = Node A l y (insert A o x r) - | otherwise = Node A l x r - diff --git a/transfer/lib/bool.tra b/transfer/lib/bool.tra deleted file mode 100644 index 2639422b7..000000000 --- a/transfer/lib/bool.tra +++ /dev/null @@ -1,6 +0,0 @@ -import prelude - -depif : (A:Type) -> (B:Type) -> (b:Bool) -> A -> B -> if Type b then A else B -depif _ _ True x _ = x -depif _ _ False _ y = y - diff --git a/transfer/lib/collection.tra b/transfer/lib/collection.tra deleted file mode 100644 index 59b71a5e9..000000000 --- a/transfer/lib/collection.tra +++ /dev/null @@ -1,77 +0,0 @@ --- NOTE: this is unfinished and untested - -import prelude -import bintree - -Collection : Type -> Type -Collection C = - sig - -- types - Elem : Type - -- Add stuff - zero : C - plus : C -> C -> C - -- Collection-specific stuff - size : C -> Integer - add : Elem -> C -> C - elem : Elem -> C -> Bool - map : (Elem -> Elem) -> C -> C - filter : (Elem -> Bool) -> C -> C - fromList : List Elem -> C - toList : C -> List Elem - - --- --- Collection String instance --- - -collection_String : Collection String -collection_String = - rec - Elem = Char - zero = "" - plus = prim_add_String - size = prim_length_String - -- ... - - --- --- Collection List instance --- - -collection_List : (A : Type) -> Collection (List A) -collection_List A = - rec - Elem = A - zero = Nil A - plus = append A - size = length A - add = Cons A - -- ... - --- --- Collection Vector instance --- - -collection_Vector : (A : Type) -> (n : Nat) -> Collection (Vector A n) -collection_Vector A n = - rec - Elem = A - zero = Empty A - plus = appendV A n n -- FIXME: this only works for vectors of the same length! - -- ... - - --- --- Collection BinTree instance --- - -collection_BinTree : (A : Type) -> Ord A -> Collection (BinTree A) -collection_BinTree A o = - rec - Elem = A - zero = Nil A - plus = merge A o - size = sizeBT A - add = insert A o - -- ... diff --git a/transfer/lib/nat.tra b/transfer/lib/nat.tra deleted file mode 100644 index b13a809ed..000000000 --- a/transfer/lib/nat.tra +++ /dev/null @@ -1,24 +0,0 @@ -import prelude - -data Nat : Type where - Zero : Nat - Succ : (n:Nat) -> Nat - -add_Nat : Add Nat -add_Nat = rec zero = Zero - plus = natPlus - -natPlus : Nat -> Nat -> Nat -natPlus Zero y = y -natPlus (Succ x) y = Succ (natPlus x y) - -pred : Nat -> Nat -pred Zero = Zero -pred (Succ n) = n - -natToInt : Nat -> Integer -natToInt Zero = 0 -natToInt (Succ n) = 1 + natToInt n - -intToNat : Integer -> Nat -intToNat n = if n == 0 then Zero else Succ (intToNat (n-1)) diff --git a/transfer/lib/prelude.tra b/transfer/lib/prelude.tra deleted file mode 100644 index 054058db4..000000000 --- a/transfer/lib/prelude.tra +++ /dev/null @@ -1,502 +0,0 @@ --- --- Prelude for the transfer language. --- - - --- --- Basic functions --- - -const : (A:Type) -> (B:Type) -> A -> B -> A -const _ _ x _ = x - -id : (A:Type) -> A -> A -id _ x = x - -flip : (A:Type) -> (B:Type) -> (C:Type) -> (A -> B -> C) -> B -> A -> C -flip _ _ _ f x y = f y x - -compose : (A:Type) -> (B:Type) -> (C:Type) -> (B -> C) -> (A -> B) -> A -> C -compose _ _ _ f g x = f (g x) - -otherwise : Bool -otherwise = True - - --- --- The Integer type --- - --- Instances: - -num_Integer : Num Integer -num_Integer = rec zero = 0 - plus = prim_add_Integer - minus = prim_sub_Integer - one = 1 - times = prim_mul_Integer - div = prim_div_Integer - mod = prim_mod_Integer - negate = prim_neg_Integer - eq = prim_eq_Integer - compare = prim_cmp_Integer - -show_Integer : Show Integer -show_Integer = rec show = prim_show_Integer - - --- --- The Double type --- - --- Instances: - -num_Double : Num Double -num_Double = rec zero = 0.0 - plus = prim_add_Double - minus = prim_sub_Double - one = 1.0 - times = prim_mul_Double - div = prim_div_Double - mod = prim_mod_Double - negate = prim_neg_Double - eq = prim_eq_Double - compare = prim_cmp_Double - -show_Double : Show Double -show_Double = rec show = prim_show_Double - - - --- --- The String type --- - --- Instances: - -add_String : Add String -add_String = rec zero = "" - plus = prim_add_String - - -ord_String : Ord String -ord_String = rec eq = prim_eq_String - compare = prim_cmp_String - -show_String : Show String -show_String = rec show = prim_show_String - - --- --- The Bool type --- - -data Bool : Type where - True : Bool - False : Bool - --- derive Show Bool -derive Eq Bool --- derive Ord Bool - -not : Bool -> Bool -not b = if b then False else True - --- Instances: - -neg_Bool : Neg Bool -neg_Bool = rec negate = not - -add_Bool : Add Bool -add_Bool = rec zero = False - plus = \x -> \y -> x || y - -mul_Bool : Add Bool -mul_Bool = rec one = True - times = \x -> \y -> x && y - - --- --- Tuples --- - -Pair : Type -> Type -> Type -Pair A B = sig { p1 : A; p2 : B } - -pair : (A:Type) -> (B:Type) -> A -> B -> Pair A B -pair _ _ x y = rec { p1 = x; p2 = y } - -fst : (A:Type) -> (B:Type) -> Pair A B -> A -fst _ _ p = case p of Pair _ _ x _ -> x - -snd : (A:Type) -> (B:Type) -> Pair A B -> B -snd _ _ p = case p of Pair _ _ x _ -> x - -{- - - syntax: - - (x1,...,xn) => { p1 = e1; ... ; pn = en } - - where n >= 2 and x1,...,xn are expressions or patterns - --} - - --- --- The List type --- - -data List : Type -> Type where - Nil : (A:Type) -> List A - Cons : (A:Type) -> A -> List A -> List A - -foldr : (A : Type) -> (B : Type) -> (A -> B -> B) -> B -> List A -> B -foldr _ _ _ x [] = x -foldr A B f x (y::ys) = f y (foldr A B f x ys) - -length : (A:Type) -> List A -> Integer -length A = foldr A Integer (\_ -> \y -> y+1) 0 - -map : (A:Type) -> (B:Type) -> (A -> B) -> List A -> List B -map _ _ _ [] = [] -map A B f (x::xs) = f x :: map A B f xs - -filter : (A:Type) -> (A -> Bool) -> List A -> List A -filter _ _ [] = [] -filter A f (x::xs) | f x = x :: filter A f xs -filter A f (x::xs) = filter A f xs - -append : (A:Type) -> List A -> List A -> List A -append A xs ys = foldr A (List A) (Cons A) ys xs - -concat : (A : Type) -> List (List A) -> List A -concat A = foldr (List A) (List A) (append A) (Nil A) - -partition : (A : Type) -> (A -> Bool) -> List A -> Pair (List A) (List A) -partition _ _ [] = ([],[]) -partition A p (x::xs) = - let r = partition A p xs - in if p x then (x :: r.p1, r.p2) else (r.p1, x :: r.p2) - - --- Instances: - -add_List : (A : Type) -> Add (List A) -add_List A = rec zero = Nil A - plus = append A - - -monad_List : Monad List -monad_list = rec return = \A -> \x -> Cons A x (Nil A) - bind = \A -> \B -> \m -> \k -> concat B (map A B k m) - - - - - --- --- The Maybe type --- - -data Maybe : Type -> Type where - Nothing : (A : Type) -> Maybe A - Just : (A : Type) -> A -> Maybe A - --- derive Show Maybe -derive Eq Maybe --- derive Ord Maybe - - -fromMaybe : (A : Type) -> A -> Maybe A -> A -fromMaybe _ x Nothing = x -fromMaybe _ _ (Just x) = x - -maybe : (A : Type) -> (B : Type) -> B -> (A -> B) -> Maybe A -> A -maybe _ _ x _ Nothing = x -maybe _ _ _ f (Just x) = f x - - --- Instances: - -monad_Maybe : Monad Maybe -monad_Maybe = - rec return = Just - bind = \A -> \B -> \m -> \k -> - case m of - Nothing _ -> Nothing B - Just _ x -> k x - - - - --- --- The Num class --- - -Num : Type -> Type -Num A = sig zero : A - plus : A -> A -> A - minus : A -> A -> A - one : A - times : A -> A -> A - div : A -> A -> A - mod : A -> A -> A - negate : A -> A - eq : A -> A -> Bool - compare : A -> A -> Ordering - - - - --- --- The Add class --- - -Add : Type -> Type -Add A = sig zero : A - plus : A -> A -> A - -zero : (A : Type) -> Add A -> A -zero _ d = d.zero - -plus : (A : Type) -> Add A -> A -> A -> A -plus _ d = d.plus - -sum : (A:Type) -> Add A -> List A -> A -sum A d = foldr A A d.plus d.zero - - --- Operators: - -{- - (x + y) => (plus ? ? x y) --} - - - - - --- --- The Sub class --- - -Sub : Type -> Type -Sub = sig minus : A -> A -> A - -minus : (A : Type) -> Sub A -> A -minus _ d = d.minus - - - - - --- --- The Mul class --- - -Mul : Type -> Type -Mul A = sig one : A - times : A -> A -> A - -one : (A : Type) -> Mul A -> A -one _ d = d.one - -times : (A : Type) -> Mul A -> A -> A -> A -times _ d = d.times - -product : (A:Type) -> Mul A -> List A -> A -product A d = foldr A A d.times d.one - --- Operators: - -{- - (x * y) => (times ? ? x y) --} - - - - --- --- The Div class --- - -Div : Type -> Type -Div A = sig div : A -> A -> A - mod : A -> A -> A - -div : (A : Type) -> Div A -> A -> A -> A -div _ d = d.div - -mod : (A : Type) -> Div A -> A -> A -> A -mod _ d = d.mod - --- Operators: - -{- - (x / y) => (div ? ? x y) - (x % y) => (mod ? ? x y) --} - - - - - --- --- The Neg class --- - -Neg : Type -> Type -Neg A = sig negate : A -> A - -negate : (A : Type) -> Neg A -> A -> A -negate _ d = d.negate - --- Operators: - -{- - (-x) => negate ? ? x --} - - - - --- --- The Eq class --- - -Eq : Type -> Type -Eq A = sig eq : A -> A -> Bool - -eq : (A : Type) -> Eq A -> A -> A -> Bool -eq _ d = d.eq - -neq : (A : Type) -> Eq A -> A -> A -> Bool -neq A d x y = not (eq A d x y) - - --- Operators: - -{- - (x == y) => (eq ? ? x y) - (x /= y) => (neq ? ? x y) --} - - - - - --- --- The Ord class --- - -data Ordering : Type where - LT : Ordering - EQ : Ordering - GT : Ordering - -Ord : Type -> Type -Ord A = sig eq : A -> A -> Bool - compare : A -> A -> Ordering - -compare : (A : Type) -> Ord A -> A -> A -> Ordering -compare _ d = d.compare - -ordOp : (Ordering -> Bool) -> (A : Type) -> Ord A -> A -> A -> Bool -ordOp f A d x y = f (compare A d x y) - -lt : (A : Type) -> Ord A -> A -> A -> Bool -lt = ordOp (\o -> case o of { LT -> True; _ -> False }) - -le : (A : Type) -> Ord A -> A -> A -> Bool -le = ordOp (\o -> case o of { GT -> False; _ -> True }) - -ge : (A : Type) -> Ord A -> A -> A -> Bool -ge = ordOp (\o -> case o of { LT -> False; _ -> True }) - -gt : (A : Type) -> Ord A -> A -> A -> Bool -gt = ordOp (\o -> case o of { GT -> True; _ -> False }) - --- Operators: - -{- - (x < y) => (lt ? ? x y) - (x <= y) => (le ? ? x y) - (x >= y) => (ge ? ? x y) - (x > y) => (gt ? ? x y) --} - - - - - - --- --- The Show class --- - -Show : Type -> Type -Show A = sig show : A -> String - -show : (A : Type) -> Show A -> A -> String -show _ d = d.show - - - - - - --- --- The Monoid class --- - -Monoid : Type -> Type -Monoid A = sig mzero : A - mplus : A -> A -> A - - - - --- --- The Compos class --- - -Compos : (C : Type) -> (C -> Type) -> Type -Compos C T = sig - composOp : (c : C) -> ((a : C) -> T a -> T a) -> T c -> T c - composFold : (B : Type) -> Monoid B -> (c : C) -> ((a : C) -> T a -> b) -> T c -> b - -composOp : (C : Type) -> (T : C -> Type) -> (d : Compos C T) - -> (c : C) -> ((a : C) -> T a -> T a) -> T c -> T c -composOp _ _ d = d.composOp - -composFold : (C : Type) -> (T : C -> Type) -> (d : Compos C T) -> (B : Type) -> Monoid B - -> (c : C) -> ((a : C) -> T a -> b) -> T c -> b -composFold _ _ d = d.composFold - - - - - --- --- The Monad class --- - -Monad : (Type -> Type) -> Type -Monad M = sig return : (A : Type) -> M A - bind : (A : Type) -> (B : Type) -> M A -> (A -> M B) -> M B - -return : (M : Type -> Type) -> Monad M -> M A -return _ d = d.return - -bind : (M : Type -> Type) -> Monad M - -> (A : Type) -> (B : Type) -> M A -> (A -> M B) -> M B -bind _ d = d.bind - --- Operators: - -{- - (x >>= y) => bind ? ? ? ? x y - (x >> y) => bind ? ? ? ? x (\_ -> y) --} - diff --git a/transfer/lib/vector.tra b/transfer/lib/vector.tra deleted file mode 100644 index 2eda35167..000000000 --- a/transfer/lib/vector.tra +++ /dev/null @@ -1,15 +0,0 @@ --- NOTE: this is unfinished and untested - -import nat - -data Vector : Type -> Nat -> Type where - Empty : (A:Type) -> Vector A Zero - Cell : (A:Type) -> (n:Nat) -> A -> Vector A n -> Vector A (Succ n) - -mapV : (A:Type) -> (B:Type) -> (n:Nat) -> (A -> B) -> Vector A n -> Vector B n -mapV A B _ f (Empty _) = Empty B -mapV A B (Succ n) f (Cell _ _ x xs) = Cell B n (f x) (mapV A B n f xs) - -appendV : (A:Type) -> (n:Nat) -> (m:Nat) -> Vector A n -> Vector A m -> Vector A (plusNat n m) -appendV A _ _ (Empty _) ys = ys -appendV A (Succ n) m (Cell _ _ x xs) ys = appendV A n (Succ m) xs (Cell A m x ys) diff --git a/transfer/transferc.hs b/transfer/transferc.hs deleted file mode 100644 index 7a88d8e3a..000000000 --- a/transfer/transferc.hs +++ /dev/null @@ -1,39 +0,0 @@ -module Main where - -import Transfer.CompilerAPI - -import Data.List (partition, isPrefixOf) -import System.Environment -import System.Exit -import System.IO - -die :: String -> IO a -die s = do - hPutStrLn stderr s - exitFailure - -getPath :: IO [String] -getPath = do env <- getEnvironment - return $ case lookup "TRANSFER_PATH" env of - Nothing -> [] - Just p -> splitBy (==':') p - --- Modified version of a function which is originally --- Copyright Bryn Keller -splitBy :: (a -> Bool) -> [a] -> [[a]] -splitBy _ [] = [] -splitBy f list = first : splitBy f (dropWhile f rest) - where (first, rest) = break f list - -main :: IO () -main = do - args <- getArgs - let (flags,files) = partition ("-" `isPrefixOf`) args - argPath = [ p | ('-':'i':p) <- flags ] - envPath <- getPath - case files of - [f] -> do - cf <- compileFile (argPath ++ envPath) f - putStrLn $ "Wrote " ++ cf - return () - _ -> die "Usage: transferc [-i [-i ... ]] " diff --git a/transfer/trci.hs b/transfer/trci.hs deleted file mode 100644 index 3cfd02bd6..000000000 --- a/transfer/trci.hs +++ /dev/null @@ -1,37 +0,0 @@ -import Transfer.InterpreterAPI -import Transfer.Interpreter (prEnv) - -import Control.Monad (when) -import Data.List (partition, isPrefixOf) -import System.Environment (getArgs) -import System.IO (isEOF) - -interpretLoop :: Env -> IO () -interpretLoop env = - do - eof <- isEOF - if eof - then return () - else do - line <- getLine - r <- evaluateString env line - putStrLn r - interpretLoop env - -runMain :: Env -> IO () -runMain env = do - r <- evaluateString env "main" - putStrLn r - -main :: IO () -main = do args <- getArgs - let (flags,files) = partition ("-" `isPrefixOf`) args - env <- case files of - [f] -> loadFile f - _ -> fail "Usage: trci [-i] " - when ("-v" `elem` flags) $ do - putStrLn "Top-level environment:" - putStrLn (prEnv env) - if "-i" `elem` flags - then interpretLoop env - else runMain env