on master help sign in
1774 files changed+82138−43308
since splitsnapshots
unifiedsplit
.github/ISSUE_TEMPLATE.md+9 .gitignore+39−14 .hlint.yaml+61 .stylish-haskell.yaml+154 .travis.yml+170−33 CHANGELOG−578 CHANGELOG.md+1290 CITATION.md+1−1 CONTRIBUTING.md+25−10 CONTRIBUTORS+215−31 INSTALL.md+153 Makefile+33−21 README.md+18−47 RELEASE-CHECKS.md+44 Setup.hs+129−61 appveyor.yml+27 azure-pipelines.yml+143 benchmarks/build.pl+3−2 benchmarks/fasta/fasta.idr+20−16 benchmarks/pidigits/pidigits.idr+11−11 benchmarks/quasigroups/Main.idr+14−11 benchmarks/quasigroups/Parser.idr+12−9 benchmarks/quasigroups/Solver.idr+6−6 benchmarks/trivial/sortvec.idr+6−5 codegen/idris-c/Main.hs → codegen/idris-codegen-c/Main.hs+12−15 codegen/idris-javascript/Main.hs → codegen/idris-codegen-javascript/Main.hs+8−8 codegen/idris-node/Main.hs → codegen/idris-codegen-node/Main.hs+17−11 config.mk+21−14 custom.mk-alldeps+1−1 docs/LICENSE+1−1 docs/Makefile+1−1 docs/README.md+3−3 docs/_static/theme_overrides.css+13 docs/conf.py+81−12 docs/effects/conclusions.rst+11−11 docs/effects/depeff.rst+21−12 docs/effects/hangman.rst+9−10 docs/effects/impleff.rst+15−15 docs/effects/index.rst+14−2 docs/effects/introduction.rst+5−4 docs/effects/simpleeff.rst+65−62 docs/effects/state.rst+17−15 docs/effects/summary.rst+37−37 docs/elaboratorReflection/elabReflection.rst+60 docs/reference/elaborator-reflection.rst → docs/elaboratorReflection/elaborator-reflection.rst+77−25 docs/elaboratorReflection/example1.rst+192 docs/elaboratorReflection/generatingData.rst+385 docs/elaboratorReflection/holes.rst+196 docs/elaboratorReflection/index.rst+27 docs/elaboratorReflection/primitive.rst+518 docs/elaboratorReflection/tactics.rst+430 docs/faq/faq.rst+162−22 docs/guides/index.rst+1−1 docs/guides/theorem-prover.rst+1−1 docs/guides/type-providers-ffi.rst+37−81 docs/image/README.md+16 docs/image/attack.png docs/image/attack.svg+199 docs/image/binders.png docs/image/binders.svg+326 docs/image/compareToProofAssist.png docs/image/compareToProofAssist.svg+260 docs/image/elab.png docs/image/elab.svg+139 docs/image/elabLogicEx1_1.png docs/image/elabLogicEx1_1.svg+99 docs/image/elabLogicEx1_2.png docs/image/elabLogicEx1_2.svg+112 docs/image/elabLogicEx1_3.png docs/image/elabLogicEx1_3.svg+112 docs/image/elabLogicEx1_4.png docs/image/elabLogicEx1_4.svg+80 docs/image/elabOverview.png docs/image/elabOverview.svg+585 docs/image/elabProofState.png docs/image/elabProofState.svg+356 docs/image/elabProofStateEx1_1.png docs/image/elabProofStateEx1_1.svg+312 docs/image/elabProofStateEx1_2.png docs/image/elabProofStateEx1_2.svg+281 docs/image/elabProofStateEx1_3.png docs/image/elabProofStateEx1_3.svg+244 docs/image/fill.png docs/image/fill.svg+163 docs/image/generateDatatype.png docs/image/generateDatatype.svg+540 docs/image/generateFunction.png docs/image/generateFunction.svg+588 docs/image/generateFunction2.png docs/image/generateFunction2.svg+430 docs/image/idrisTopLevel.png docs/image/idrisTopLevel.svg+524 docs/image/login.png docs/image/netstate.png docs/image/parserModules.png docs/image/parserModules.svg+1251 docs/image/parserTopLevel.png docs/image/parserTopLevel.svg+294 docs/image/plusReducesProof.png docs/image/plusReducesProof.svg+339 docs/image/recogniser.png docs/image/recogniser.svg+477 docs/image/solve.png docs/image/solve.svg+163 docs/image/tokenise.png docs/image/tokenise.svg+740 docs/image/tree.png docs/image/tree.svg+212 docs/index.rst+9−109 docs/listing/idris-prompt-helloworld.txt+2−2 docs/listing/idris-prompt-interp.txt+2−2 docs/listing/idris-prompt-start.txt+2−2 docs/make.bat+1−1 docs/faq/index.rst → docs/parserLibrary/index.rst+11−6 docs/parserLibrary/introduction.rst+76 docs/parserLibrary/lexer.rst+288 docs/parserLibrary/parser.rst+700 docs/parserLibrary/whitespace.rst+250 docs/proofs/definitional.rst+235 docs/proofs/index.rst+5−2 docs/proofs/inductive.rst+3−1 docs/proofs/interactive.rst+222−91 docs/proofs/interactiveOld.rst+169 docs/proofs/patterns.rst+3−3 docs/proofs/pluscomm.rst+3−3 docs/proofs/propositional.rst+133 docs/reference/codegen.rst+147 docs/reference/compilation.rst+81−11 docs/reference/documenting.rst+12−5 docs/reference/erasure.rst+10−10 docs/reference/ffi.rst+272−17 docs/reference/ide-protocol.rst+32−19 docs/reference/index.rst+6−2 docs/reference/internals.rst+179 docs/reference/language-extensions.rst+8−3 docs/reference/language-features.rst+3−3 docs/reference/misc.rst+36−13 docs/reference/packages.rst+58−9 docs/reference/partial-evaluation.rst+305 docs/reference/repl.rst+34−20 docs/reference/syntax-guide.rst+222−8 docs/reference/syntax-reference.rst+422 docs/reference/tactics.rst+14−23 docs/reference/type-directed-search.rst+336 docs/reference/uniqueness-types.rst+6−6 docs/st/composing.rst+774 docs/st/examples.rst+439 docs/st/index.rst+27 docs/st/introduction.rst+93 docs/st/machines.rst+536 docs/st/state.rst+654 docs/tutorial/conclusions.rst+6−6 docs/tutorial/index.rst+6−4 docs/tutorial/interactive.rst+8−9 docs/tutorial/classes.rst → docs/tutorial/interfaces.rst+221−105 docs/tutorial/interp.rst+29−17 docs/tutorial/introduction.rst+10−5 docs/tutorial/miscellany.rst+56−21 docs/tutorial/modules.rst+87−56 docs/tutorial/packages.rst+143−23 docs/tutorial/provisional.rst+14−14 docs/tutorial/starting.rst+4−1 docs/tutorial/syntax.rst+17−17 docs/tutorial/testing.rst−65 docs/tutorial/theorems.rst+146−7 docs/tutorial/typesfuns.rst+448−225 docs/tutorial/views.rst+77−19 icons/idris.ico icons/idris_icon.rc+1 idris-tutorial.pdf idris.cabal+227−757 iif/adder.iif−30 iif/big.iif−7 iif/ctest.c−106 iif/lazy.iif−21 iif/testmap.iif−30 iif/testvm.iif−32 jsrts/Runtime-browser.js−14 jsrts/Runtime-common.js+21−102 jsrts/Runtime-javascript.js+15 jsrts/Runtime-node.js+38−15 jsrts/jsbn/jsbn-browser.js+1353 jsrts/jsbn/jsbn-node.js+1 jsrts/jsbn/jsbn.js−1238 libs/Makefile+6−2 libs/base/Control/Arrow.idr+19−19 libs/base/Control/Catchable.idr+35−10 libs/base/Control/Category.idr+8−6 libs/base/Control/IOExcept.idr+20−24 libs/base/Control/Isomorphism.idr+38−29 libs/base/Control/Monad/Identity.idr+26−5 libs/base/Control/Monad/RWS.idr+27−21 libs/base/Control/Monad/Reader.idr+10−10 libs/base/Control/Monad/State.idr+28−24 libs/base/Control/Monad/Trans.idr+3−1 libs/base/Control/Monad/Writer.idr+19−16 libs/base/Data/Bits.idr+163−92 libs/base/Data/Buffer.idr+170 libs/base/Data/Complex.idr+29−25 libs/base/Data/Erased.idr+4−4 libs/base/Data/Fin.idr+35−31 libs/base/Data/Floats.idr−59 libs/base/Data/HVect.idr+18−19 libs/base/Data/IORef.idr+61 libs/base/Data/List.idr+36−13 libs/base/Data/List/Quantifiers.idr+82 libs/base/Data/List/Views.idr+223 libs/base/Data/Mod2.idr+14−16 libs/base/Data/Morphisms.idr+54−26 libs/base/Data/Nat/Views.idr+34 libs/base/Data/Primitives/Views.idr+81 libs/base/Data/So.idr+13−2 libs/base/Data/SortedSet.idr−28 libs/base/Data/String.idr+114 libs/base/Data/String/Views.idr+15 libs/base/Data/Vect.idr+1011−9 libs/base/Data/Vect/Quantifiers.idr+4−1 libs/base/Data/Vect/Views.idr+83 libs/base/Data/VectType.idr−596 libs/base/Debug/Error.idr+5−8 libs/base/Debug/Trace.idr+2−1 libs/base/Language/Reflection/Utils.idr+148−97 libs/base/Makefile+4−3 libs/base/Syntax/PreorderReasoning.idr+2 libs/base/System.idr+58−28 libs/base/System/Concurrency/Channels.idr+70 libs/base/System/Concurrency/Raw.idr+78−45 libs/base/System/Info.idr+3 libs/base/System/Interactive.idr−73 libs/base/base.ipkg+51−29 libs/contrib/CFFI.idr+4 libs/contrib/CFFI/Memory.idr+99 libs/contrib/CFFI/Types.idr+161 libs/contrib/Classes/Verified.idr−117 libs/contrib/Control/Algebra.idr+31−16 libs/contrib/Control/Algebra/Lattice.idr+28−11 libs/contrib/Control/Algebra/Laws.idr+153 libs/contrib/Control/Algebra/NumericImplementations.idr+134 libs/contrib/Control/Algebra/NumericInstances.idr−104 libs/contrib/Control/Algebra/VectorSpace.idr+5−3 libs/contrib/Control/Delayed.idr+26 libs/contrib/Control/Isomorphism/Extra.idr+42 libs/contrib/Control/Isomorphism/Fin.idr+54 libs/contrib/Control/Isomorphism/Primitives.idr+1−1 libs/contrib/Control/Isomorphism/Vect.idr+155 libs/contrib/Control/Monad/Syntax.idr+18 libs/contrib/Control/Partial.idr+1−1 libs/contrib/Control/Pipeline.idr+26 libs/contrib/Control/ST.idr+660 libs/contrib/Control/ST/Exception.idr+38 libs/contrib/Control/ST/File.idr+247 libs/contrib/Control/ST/ImplicitCall.idr+13 libs/contrib/Control/ST/Random.idr+42 libs/contrib/Data/Bool/Extra.idr+82 libs/contrib/Data/BoundedList.idr+32−3 libs/contrib/Data/Chain.idr+46 libs/contrib/Data/CoList.idr+6−6 libs/contrib/Data/Combinators.idr+38 libs/contrib/Data/Combinators/Applicative.idr+27 libs/contrib/Data/Combinators/Arrow.idr+15 libs/contrib/Data/Fin/Extra.idr+86 libs/contrib/Data/Fuel.idr+18 libs/contrib/Data/Fun.idr+1 libs/contrib/Data/Hash.idr+16−16 libs/contrib/Data/Heap.idr+18−32 libs/contrib/Data/IOArray.idr+47 libs/contrib/Data/List/Group.idr+27 libs/contrib/Data/List/Permutations.idr+12 libs/contrib/Data/List/Reverse.idr+99 libs/contrib/Data/List/Zipper.idr+160 libs/contrib/Data/Logic/Propositional.idr+161 libs/contrib/Data/Matrix.idr+33−124 libs/contrib/Data/Matrix/Algebraic.idr+149 libs/contrib/Data/Matrix/Numeric.idr+135 libs/contrib/Data/Monoid.idr+33 libs/contrib/Data/Nat.idr+17−158 libs/contrib/Data/Nat/Ack.idr+60 libs/contrib/Data/Nat/DivMod.idr+61 libs/contrib/Data/Nat/DivMod/IteratedSubtraction.idr+165 libs/contrib/Data/Nat/Fact.idr+56 libs/contrib/Data/Nat/Fib.idr+50 libs/contrib/Data/Nat/Parity.idr+217 libs/contrib/Data/Pairs/Implicit.idr+13 libs/contrib/Data/PosNat.idr+57 libs/contrib/Data/Rel.idr+1 libs/contrib/Data/Sign.idr+32−1 libs/contrib/Data/SortedBag.idr+127 libs/contrib/Data/SortedMap.idr+74−11 libs/contrib/Data/SortedSet.idr+41−10 libs/contrib/Data/Storable.idr+41 libs/contrib/Data/Stream/Extra.idr+10 libs/contrib/Data/String.idr−31 libs/contrib/Data/String/Extra.idr+88 libs/contrib/Data/ZZ.idr+229−28 libs/contrib/Decidable/Decidable.idr+4−4 libs/contrib/Decidable/Order.idr+17−17 libs/contrib/Interfaces/Correlative.idr+63 libs/contrib/Interfaces/Proposition.idr+32 libs/contrib/Interfaces/Verified.idr+359 libs/contrib/Language/JSON.idr+14 libs/contrib/Language/JSON/Data.idr+98 libs/contrib/Language/JSON/Lexer.idr+40 libs/contrib/Language/JSON/Parser.idr+71 libs/contrib/Language/JSON/String.idr+16 libs/contrib/Language/JSON/String/Lexer.idr+38 libs/contrib/Language/JSON/String/Parser.idr+25 libs/contrib/Language/JSON/String/Tokens.idr+60 libs/contrib/Language/JSON/Tokens.idr+72 libs/contrib/Makefile+4−3 libs/contrib/Network/Cgi.idr+32−30 libs/contrib/Network/Socket.idr+195−317 libs/contrib/Network/Socket/Data.idr+172 libs/contrib/Network/Socket/Raw.idr+199 libs/contrib/System/Concurrency/Process.idr+30−18 libs/contrib/Test/Unit.idr+14 libs/contrib/Test/Unit/Assertions.idr+37 libs/contrib/Test/Unit/Display.idr+27 libs/contrib/Test/Unit/Generic.idr+43 libs/contrib/Test/Unit/Runners.idr+36 libs/contrib/Text/Lexer.idr+324 libs/contrib/Text/Lexer/Core.idr+193 libs/contrib/Text/Literate.idr+155 libs/contrib/Text/Parser.idr+226 libs/contrib/Text/Parser/Core.idr+265 libs/contrib/Text/PrettyPrint/WL.idr+18 libs/contrib/Text/PrettyPrint/WL/Characters.idr+103 libs/contrib/Text/PrettyPrint/WL/Combinators.idr+259 libs/contrib/Text/PrettyPrint/WL/Core.idr+226 libs/contrib/Text/Quantity.idr+38 libs/contrib/Text/Token.idr+38 libs/contrib/contrib.ipkg+111−22 libs/effects/Effect/Default.idr+16−15 libs/effects/Effect/Exception.idr+9−7 libs/effects/Effect/File.idr+411−130 libs/effects/Effect/Logging/Category.idr+181 libs/effects/Effect/Logging/Default.idr+118 libs/effects/Effect/Logging/Level.idr+81 libs/effects/Effect/Memory.idr+15−9 libs/effects/Effect/Monad.idr+5−3 libs/effects/Effect/Perf.idr+230 libs/effects/Effect/Random.idr+34−16 libs/effects/Effect/Select.idr+4−2 libs/effects/Effect/State.idr+3−3 libs/effects/Effect/StdIO.idr+4−2 libs/effects/Effect/System.idr+11−2 libs/effects/Effect/Trans.idr+2−2 libs/effects/Effects.idr+173−86 libs/effects/Makefile+2−1 libs/effects/effects.ipkg+19−5 libs/oldeffects/Effect/Default.idr−44 libs/oldeffects/Effect/Exception.idr−41 libs/oldeffects/Effect/File.idr−128 libs/oldeffects/Effect/Memory.idr−175 libs/oldeffects/Effect/Monad.idr−21 libs/oldeffects/Effect/Random.idr−47 libs/oldeffects/Effect/Select.idr−23 libs/oldeffects/Effect/State.idr−40 libs/oldeffects/Effect/StdIO.idr−60 libs/oldeffects/Effect/System.idr−43 libs/oldeffects/Effects.idr−333 libs/oldeffects/effects.ipkg−9 libs/prelude/Builtins.idr+109−50 libs/prelude/Decidable/Equality.idr+82−36 libs/prelude/IO.idr+150−53 libs/prelude/Language/Reflection.idr+801−175 libs/prelude/Language/Reflection/Elab.idr+551−185 libs/prelude/Language/Reflection/Errors.idr+5−3 libs/prelude/Makefile+3−2 libs/prelude/Prelude.idr+114−279 libs/prelude/Prelude/Algebra.idr+6−8 libs/prelude/Prelude/Applicative.idr+37−7 libs/prelude/Prelude/Basics.idr+8−7 libs/prelude/Prelude/Bits.idr+87−30 libs/prelude/Prelude/Bool.idr+15−3 libs/prelude/Prelude/Cast.idr+22−14 libs/prelude/Prelude/Chars.idr+16−6 libs/prelude/Prelude/Doubles.idr+64 libs/prelude/Prelude/Either.idr+16−6 libs/prelude/Prelude/File.idr+391 libs/prelude/Prelude/Foldable.idr+26−6 libs/prelude/Prelude/Functor.idr+24−13 libs/prelude/Prelude/Interactive.idr+180 libs/prelude/Prelude/Classes.idr → libs/prelude/Prelude/Interfaces.idr+153−132 libs/prelude/Prelude/List.idr+230−175 libs/prelude/Prelude/Maybe.idr+43−15 libs/prelude/Prelude/Monad.idr+38−11 libs/prelude/Prelude/Nat.idr+207−395 libs/prelude/Prelude/Pairs.idr+8−8 libs/prelude/Prelude/Providers.idr+7−5 libs/prelude/Prelude/Show.idr+48−39 libs/prelude/Prelude/Stream.idr+23−23 libs/prelude/Prelude/Strings.idr+132−42 libs/prelude/Prelude/Traversable.idr+11−1 libs/prelude/Prelude/Uninhabited.idr+4−2 libs/contrib/Control/WellFounded.idr → libs/prelude/Prelude/WellFounded.idr+59−7 libs/prelude/prelude.ipkg+36−10 libs/oldeffects/Makefile → libs/pruviloj/Makefile+3−3 libs/pruviloj/Pruviloj.idr+8 libs/pruviloj/Pruviloj/Core.idr+331 libs/pruviloj/Pruviloj/Derive/DecEq.idr+196 libs/pruviloj/Pruviloj/Derive/Eliminators.idr+265 libs/pruviloj/Pruviloj/Disjoint.idr+125 libs/pruviloj/Pruviloj/Induction.idr+159 libs/pruviloj/Pruviloj/Injective.idr+122 libs/pruviloj/Pruviloj/Internals.idr+136 libs/pruviloj/Pruviloj/Internals/TyConInfo.idr+108 libs/pruviloj/Pruviloj/Renamers.idr+44 libs/pruviloj/README.txt+45 libs/pruviloj/pruviloj.ipkg+19 main/Main.hs+71−93 man/idris.1+48−15 mkpkg.sh+48−7 rts/Makefile+12−16 rts/getline.c+32−31 rts/idris_bitstring.c+284−517 rts/idris_bitstring.h+10−5 rts/idris_buffer.c+146 rts/idris_buffer.h+29 rts/idris_gc.c+70−65 rts/idris_gmp.c+158−165 rts/idris_gmp.h+16−2 rts/idris_heap.c+137−30 rts/idris_heap.h+85−3 rts/idris_main.c+44−7 rts/idris_net.c+61−30 rts/idris_net.h+14 rts/idris_opts.c+1−1 rts/idris_opts.h+1−1 rts/idris_rts.c+544−335 rts/idris_rts.h+303−102 rts/idris_stdfgn.c+230−19 rts/idris_stdfgn.h+35−1 rts/idris_utf8.c+38−2 rts/idris_utf8.h+5−1 rts/mini-gmp.c+459−167 rts/mini-gmp.h+47−8 rts/seL4/CMakeLists.txt+43 rts/seL4/README.md+5 rts/seL4/idris_main.c+31 rts/windows/idris_net.c−196 rts/windows/idris_stdfgn.c−82 rts/windows/win_utils.c+49−3 rts/windows/win_utils.h+9 samples/ST/Composite.idr+8 samples/ST/Graphics/Draw.idr+88 samples/ST/Graphics/Turtle.idr+116 samples/ST/Intro.idr+75 samples/ST/Login.idr+55 samples/ST/LoginCount.idr+77 samples/ST/Net/EchoSimple.idr+24 samples/ST/Net/Network.idr+106 samples/ST/Net/RandServer.idr+156 samples/ST/Net/Threads.idr+23 samples/ST/TreeTag.idr+29 samples/effects/Exception.idr+1−1 samples/effects/TreeTag.idr+3−3 samples/misc/binary.idr+2−2 samples/misc/interp.idr+24−15 samples/misc/named_instance.lidr → samples/misc/named_implementation.lidr+5−5 samples/tutorial/bmain.idr → samples/tutorial/BMain.idr+2−2 samples/tutorial/btree.idr → samples/tutorial/BTree.idr+4 samples/tutorial/btreemod.idr → samples/tutorial/BTreeMod.idr+5−5 samples/tutorial/foo.idr → samples/tutorial/Foo.idr samples/tutorial/hello.idr → samples/tutorial/Hello.idr samples/tutorial/idiom.idr → samples/tutorial/Idiom.idr+2−2 samples/tutorial/classes.idr → samples/tutorial/Interfaces.idr+1−1 samples/tutorial/interp.idr → samples/tutorial/Interp.idr+5−2 samples/tutorial/letbind.idr → samples/tutorial/LetBind.idr+1−1 samples/tutorial/prims.idr → samples/tutorial/Prims.idr+1−1 samples/tutorial/Record.idr+21 samples/tutorial/theorems.idr → samples/tutorial/Theorems.idr−20 samples/tutorial/universe.idr → samples/tutorial/Universe.idr samples/tutorial/usefultypes.idr → samples/tutorial/UsefulTypes.idr+1 samples/tutorial/vbroken.idr → samples/tutorial/VBroken.idr samples/tutorial/views.idr → samples/tutorial/Views.idr+8−20 samples/tutorial/viewsbroken.idr → samples/tutorial/ViewsBroken.idr samples/tutorial/wheres.idr → samples/tutorial/Wheres.idr+1−1 samples/tutorial/binary.idr−61 scripts/generate-multi-ghc-travis-template+20 scripts/runidris+25 scripts/runidris-node+25 src/IRTS/BCImp.hs−19 src/IRTS/Bytecode.hs+39−36 src/IRTS/CodegenC.hs+416−175 src/IRTS/CodegenCommon.hs+35−30 src/IRTS/CodegenJavaScript.hs+64−1358 src/IRTS/Compiler.hs+340−247 src/IRTS/Defunctionalise.hs+83−99 src/IRTS/DumpBC.hs+10−3 src/IRTS/Exports.hs+16−12 src/IRTS/Inliner.hs+7−2 src/IRTS/JavaScript/AST.hs+282−394 src/IRTS/JavaScript/Codegen.hs+636 src/IRTS/JavaScript/LangTransforms.hs+99 src/IRTS/JavaScript/Name.hs+57 src/IRTS/JavaScript/PrimOp.hs+246 src/IRTS/JavaScript/Specialize.hs+109 src/IRTS/Lang.hs+195−72 src/IRTS/LangOpts.hs+308−60 src/IRTS/Portable.hs+363 src/IRTS/Simplified.hs+59−65 src/IRTS/System.hs+84−47 src/Idris/ASTUtils.hs+72−65 src/Idris/AbsSyntax.hs+958−552 src/Idris/AbsSyntaxTree.hs+1510−1211 src/Idris/Apropos.hs+16−14 src/Idris/CaseSplit.hs+219−162 src/Idris/Chaser.hs+192−100 src/Idris/CmdOptions.hs+215−97 src/Idris/Colours.hs+42−18 src/Idris/Completion.hs+95−68 src/Idris/Core/Binary.hs+65−347 src/Idris/Core/CaseTree.hs+216−138 src/Idris/Core/Constraints.hs+64−32 src/Idris/Core/DeepSeq.hs+56−237 src/Idris/Core/Elaborate.hs+270−174 src/Idris/Core/Evaluate.hs+397−226 src/Idris/Core/Execute.hs+172−89 src/Idris/Core/ProofState.hs+250−272 src/Idris/Core/ProofTerm.hs+72−70 src/Idris/Core/TT.hs+446−351 src/Idris/Core/Typecheck.hs+195−168 src/Idris/Core/Unify.hs+238−266 src/Idris/Core/WHNF.hs+256 src/Idris/Coverage.hs+427−729 src/Idris/DSL.hs+77−65 src/Idris/DataOpts.hs+12−14 src/Idris/DeepSeq.hs+89−379 src/Idris/Delaborate.hs+242−154 src/Idris/Directives.hs+106−41 src/Idris/Docs.hs+220−132 src/Idris/Docstrings.hs+29−21 src/Idris/Elab/AsPat.hs+38−13 src/Idris/Elab/Class.hs−322 src/Idris/Elab/Clause.hs+615−367 src/Idris/Elab/Data.hs+158−394 src/Idris/Elab/Implementation.hs+489 src/Idris/Elab/Instance.hs−332 src/Idris/Elab/Interface.hs+449 src/Idris/Elab/Provider.hs+21−44 src/Idris/ElabQuasiquote.hs → src/Idris/Elab/Quasiquote.hs+27−20 src/Idris/Elab/Record.hs+149−159 src/Idris/Elab/Rewrite.hs+259 src/Idris/Elab/RunElab.hs+53 src/Idris/Elab/Term.hs+1252−923 src/Idris/Elab/Transform.hs+37−60 src/Idris/Elab/Type.hs+99−101 src/Idris/Elab/Utils.hs+608−67 src/Idris/Elab/Value.hs+39−55 src/Idris/ElabDecls.hs+135−97 src/Idris/Erasure.hs+198−80 src/Idris/ErrReverse.hs+22−21 src/Idris/Error.hs+40−29 src/Idris/Help.hs+26−16 src/Idris/IBC.hs+806−1898 src/Idris/IdeMode.hs+55−42 src/Idris/IdrisDoc.hs+104−89 src/Idris/Imports.hs+66−22 src/Idris/Info.hs+94 src/Idris/Info/Show.hs+143 src/Idris/Inliner.hs+11−6 src/Idris/Interactive.hs+267−117 src/Idris/Main.hs+309 src/Idris/ModeCommon.hs+187 src/Idris/Options.hs+291 src/Idris/Output.hs+218−44 src/Idris/Package.hs+524 src/Idris/Package/Common.hs+41 src/Idris/Package/Parser.hs+148 src/Idris/ParseExpr.hs−1469 src/Idris/ParseHelpers.hs−650 src/Idris/ParseOps.hs−173 src/Idris/Parser.hs+1030−760 src/Idris/ParseData.hs → src/Idris/Parser/Data.hs+115−137 src/Idris/Parser/Expr.hs+1580 src/Idris/Parser/Helpers.hs+559 src/Idris/Parser/Ops.hs+249 src/Idris/Parser/Stack.hs+161 src/Idris/PartialEval.hs+164−107 src/Idris/Primitives.hs+42−60 src/Idris/ProofSearch.hs+342−79 src/Idris/Prover.hs+157−127 src/Idris/Providers.hs+17−9 src/Idris/REPL.hs+431−775 src/Idris/REPL/Browse.hs+15−7 src/Idris/REPL/Commands.hs+81 src/Idris/REPL/Parser.hs+540 src/Idris/REPLParser.hs−485 src/Idris/Reflection.hs+321−205 src/Idris/Termination.hs+639 src/Idris/Transforms.hs+30−25 src/Idris/TypeSearch.hs+155−131 src/Idris/Unlit.hs+12−3 src/Idris/WhoCalls.hs+10−5 src/Pkg/PParser.hs−106 src/Pkg/Package.hs−298 src/Util/DynamicLinker.hs+103−28 src/Util/Net.hs+21−15 src/Util/Pretty.hs+15−6 src/Util/ScreenSize.hs+9−17 src/Util/System.hs+93−29 stack-11.22.yaml+21 stack-12.26.yaml+20 stack-15.3.yaml+17 stack-15.4.yaml+17 stack-shell.nix+24 stack.yaml+1 stylize.sh+40 test/Makefile−21 test/README−19 test/README.md+160 test/TestData.hs+350 test/TestRun.hs+128 test/base001/Makefile+11 test/base001/base001.idr+35 test/base001/base001.ipkg+5 test/base001/exit1.c+21 test/base001/expected.out+25 test/base001/run.sh+12 test/base001/sys.c+15 test/base001/sys.h+7 test/basic001/expected → test/basic001/expected.out test/basic001/run−6 test/basic001/run.sh+6 test/basic002/expected−1 test/basic002/expected.out+13 test/basic002/run → test/basic002/run.sh+1−1 test/basic002/test006.idr+9−9 test/basic003/expected → test/basic003/expected.out test/basic003/run → test/basic003/run.sh+1−1 test/basic004/expected → test/basic004/expected.out test/basic004/run → test/basic004/run.sh+1−1 test/basic005/expected → test/basic005/expected.out test/basic005/run → test/basic005/run.sh+1−1 test/basic006/expected → test/basic006/expected.out+8−1 test/basic006/run−6 test/basic006/run.sh+6 test/basic007/expected → test/basic007/expected.out test/basic007/run → test/basic007/run.sh+1−1 test/basic008/expected → test/basic008/expected.out test/basic008/run → test/basic008/run.sh+1−1 test/basic008/test036.idr+2−2 test/basic009/A.idr+1 test/basic009/B/C.idr+1 test/basic009/expected−4 test/basic009/expected.out+32 test/basic009/run−8 test/basic009/run.sh+8 test/basic010/Main.idr+13−13 test/basic010/expected → test/basic010/expected.out+1−1 test/basic010/run−41 test/basic010/run.sh+10 test/basic011/basic011.idr+4 test/basic011/expected → test/basic011/expected.out+4 test/basic011/run−4 test/basic011/run.sh+4 test/basic012/basic012a.idr+10 test/basic012/expected → test/basic012/expected.out test/basic012/run−4 test/basic012/run.sh+5 test/basic013/basic013.idr+45−1 test/basic013/expected−14 test/basic013/expected.out+59 test/basic013/run → test/basic013/run.sh+1−1 test/basic014/basic014.idr+44 test/disambig002/expected → test/basic014/expected.out test/basic014/run.sh+3 test/basic015/basic015.idr+73 test/basic015/expected.out+3 test/basic015/run.sh+4 test/basic016/CycleA.idr+4 test/basic016/CycleB.idr+5 test/basic016/CycleC.idr+4 test/basic016/expected.out+1 test/basic016/run.sh+3 test/basic017/basic017.idr+25 test/basic017/basic017a.idr+15 test/basic017/expected.out+8 test/basic017/run.sh+4 test/basic018/basic018.idr+14 test/basic018/expected.out+32 test/basic018/run.sh+3 test/basic019/basic019.idr+10 test/basic019/expected.out+12 test/basic019/run.sh+4 test/basic020/basic020.idr+42 test/bignum001/expected → test/basic020/expected.out test/basic020/run.sh+4 test/basic021/basic021.idr+13 test/basic021/basic021_2.idr+13 test/basic021/expected.out+2 test/basic021/run.sh+6 test/basic022/basic022.idr+13 test/basic022/expected.out+1 test/basic022/run.sh+4 test/basic023/expected.out+10 test/basic023/run.sh+4 test/basic023/sections.idr+34 test/basic024/basic024.idr+51 test/basic024/expected.out+76 test/basic024/input.in+46 test/basic024/run.sh+8 test/basic025/basic025.idr+28 test/basic025/expected.out+12 test/basic025/input.in+7 test/basic025/run.sh+7 test/basic026/basic026.idr+12 test/basic026/expected.out+2 test/basic026/run.sh+4 test/bignum001/expected.out+1 test/bignum001/run → test/bignum001/run.sh+1−1 test/bignum002/bignum002.idr+10−1 test/bignum002/expected−1 test/bignum002/expected.out+8 test/bignum002/run → test/bignum002/run.sh+1−1 test/bignum003/bignum003.idr+23 test/bignum003/expected.out+2 test/bignum003/run.sh+4 test/bounded001/expected → test/bounded001/expected.out test/bounded001/run → test/bounded001/run.sh+1−1 test/buffer001/buffer001.idr+33 test/buffer001/expected.out+7 test/buffer001/run.sh+4 test/buffer002/buffer002.idr+34 test/buffer002/expected.out+11 test/buffer002/run.sh+4 test/classes001/run−3 test/contrib001/contrib001.idr+14 test/contrib001/expected.out+12 test/contrib001/run.sh+4 test/corecords001/corecords001.idr+1−1 test/corecords001/expected → test/corecords001/expected.out test/corecords001/run → test/corecords001/run.sh+1−1 test/corecords002/expected → test/corecords002/expected.out test/corecords002/run → test/corecords002/run.sh+1−1 test/delab001/expected → test/delab001/expected.out+2−2 test/delab001/input → test/delab001/input.in test/delab001/run−3 test/delab001/run.sh+3 test/directives001/directives001.idr+28 test/directives001/expected.out+42 test/directives001/run.sh+4 test/directives002/directives002.idr+14 test/directives002/expected.out+6 test/directives002/run.sh+4 test/directives003/directives003.idr+11 test/directives003/expected.out+6 test/directives003/run.sh+13 test/disambig001/disambig001.idr−12 test/disambig001/expected−1 test/disambig001/run−4 test/disambig002/disambig002.idr+13−18 test/error002/expected → test/disambig002/expected.out test/disambig002/run−3 test/disambig002/run.sh+3 test/docs001/docs001.idr+7−7 test/docs001/expected−17 test/docs001/expected.out+17 test/docs001/input → test/docs001/input.in test/docs001/run−3 test/docs001/run.sh+3 test/docs002/docs002.idr+2−2 test/docs002/expected−12 test/docs002/expected.out+12 test/docs002/input → test/docs002/input.in test/docs002/run−3 test/docs002/run.sh+3 test/docs003/docs003.idr+2−2 test/docs003/expected−37 test/docs003/expected.out+41 test/docs003/input → test/docs003/input.in test/docs003/run−3 test/docs003/run.sh+3 test/docs004/expected → test/docs004/expected.out+3−3 test/docs004/input → test/docs004/input.in test/docs004/run−3 test/docs004/run.sh+3 test/docs005/docs005.idr+19 test/docs005/expected.out+31 test/docs005/input.in+2 test/docs005/run.sh+3 test/docs006/docs006.idr+7 test/docs006/expected.out+16 test/docs006/input.in+1 test/docs006/run.sh+3 test/dsl001/expected−2 test/dsl001/expected.out+14 test/dsl001/input.in+2 test/dsl001/run−4 test/dsl001/run.sh+5 test/dsl001/test001.idr+14−12 test/dsl002/Resimp.idr+26−23 test/dsl002/expected → test/dsl002/expected.out test/dsl002/run → test/dsl002/run.sh+1−1 test/dsl002/test → test/dsl002/test.in test/dsl002/test014.idr+8−7 test/dsl003/DSLPi.idr+3−1 test/dsl003/expected → test/dsl003/expected.out+1−1 test/dsl003/run−3 test/dsl003/run.sh+3 test/dsl004/Door0.idr+35 test/dsl004/Door1.idr+39 test/dsl004/Door2.idr+39 test/dsl004/Door3.idr+32 test/dsl004/IOu.idr+21 test/ffi004/expected → test/dsl004/expected.out test/dsl004/run.sh+5 test/effects001/expected → test/effects001/expected.out+2−2 test/effects001/run−6 test/effects001/run.sh+6 test/effects001/test021.idr+35−20 test/effects001/test021a.idr+3−3 test/effects001/testFile → test/effects001/testFile.in test/effects002/expected → test/effects002/expected.out test/effects002/run−4 test/effects002/run.sh+4 test/effects002/test025.idr+1−1 test/effects003/VectMissing.idr+1−3 test/effects003/expected−41 test/effects003/expected.out+31 test/effects003/foo−9236 test/effects003/hangman.idr+8−4 test/effects003/input−10 test/effects003/input.in+6 test/effects003/run−4 test/effects003/run.sh+4 test/effects004/expected.out test/effects004/input.in test/effects004/run−4 test/effects004/run.sh+4 test/effects005/categoryLogger.idr+23 test/effects005/defaultLogger.idr+14 test/effects005/expected.out+5 test/effects005/run.sh+6 test/error001/expected−8 test/error001/expected.out+13 test/error001/run−3 test/error001/run.sh+3 test/error002/expected.out test/error002/run.sh+1−1 test/error002/test031.idr+1−1 test/error003/ErrorReflection.idr+3−3 test/error003/expected−2 test/error003/expected.out+9 test/error003/run−3 test/error003/run.sh+3 test/error004/FunErrTest.idr+4−4 test/error004/expected−6 test/error004/expected.out+20 test/error004/run−3 test/error004/run.sh+3 test/error005/expected.out+40−5 test/error005/run−3 test/error005/run.sh+3 test/error006/WithPatsNoWith.idr+17 test/error006/expected.out+21 test/error006/run.sh+3 test/error007/error007.idr+29 test/error007/expected.out+19 test/error007/run.sh+3 test/error008/error008.idr+5 test/error008/error008a.idr+5 test/error008/expected.out+14 test/error008/run.sh+4 test/error009/expected.out+1 test/error009/run.sh+2 test/ffi001/expected.out test/ffi001/run−3 test/ffi001/run.sh+3 test/ffi001/test022.idr+2−2 test/ffi002/expected−1 test/ffi002/expected.out+6 test/ffi002/run−3 test/ffi002/run.sh+3 test/ffi002/test023.idr+2−2 test/ffi003/expected.out test/ffi003/input.in test/ffi003/run−3 test/ffi003/run.sh+3 test/ffi004/expected.out test/ffi004/run−3 test/ffi004/run.sh+3 test/ffi004/test026.idr+3−2 test/ffi004/theOtherType+1−1 test/ffi005/Postulate.idr+1−1 test/ffi005/expected.out test/ffi005/run.sh+1−1 test/ffi006/expected.out test/ffi006/ffi006.idr+1−1 test/ffi006/run−5 test/ffi006/run.sh+5 test/ffi007/expected.out+10 test/ffi007/ffi007.c+34 test/ffi007/ffi007.h+15 test/ffi007/ffi007.idr+63 test/ffi007/run.sh+4 test/ffi008/expected.out+5 test/ffi008/ffi008.c+25 test/ffi008/ffi008.h+19 test/ffi008/ffi008.idr+58 test/ffi008/run.sh+4 test/ffi009/Bad.idr+36 test/ffi009/Good.idr+37 test/ffi009/expected.out+1 test/ffi009/ffi009.c+44 test/ffi009/ffi009.h+20 test/ffi009/run.sh+5 test/ffi010/expected.out+3 test/ffi010/ffi010.idr+43 test/ffi010/run.sh+4 test/ffi011/expected.out+2 test/ffi011/ffi011.idr+27 test/ffi011/ffi011.js+7 test/ffi011/run.sh+4 test/ffi012/expected.out+1 test/ffi012/ffi012.idr+14 test/ffi012/ffi012.js+3 test/ffi012/run.sh+4 test/ffi013/expected.out+4 test/ffi013/ffi013.idr+5 test/ffi013/run.sh+17 test/folding001/expected.out test/folding001/run.sh+1−1 test/idrisdoc001/expected.out test/idrisdoc001/run.sh+1−1 test/idrisdoc002/TestFunctions.idr+2−1 test/idrisdoc002/expected.out test/idrisdoc002/run.sh+2−2 test/idrisdoc003/TestDatatypes.idr+2−1 test/idrisdoc003/expected.out test/idrisdoc003/run.sh+2−2 test/idrisdoc004/TestInterfaces.idr+9 test/idrisdoc004/TestTypeclasses.idr−8 test/idrisdoc004/expected−1 test/idrisdoc004/expected.out+1 test/idrisdoc004/run−5 test/idrisdoc004/run.sh+5 test/idrisdoc004/test_interfaces.ipkg+6 test/idrisdoc004/test_typeclasses.ipkg−6 test/idrisdoc005/TestTracing.idr+2−1 test/idrisdoc005/expected.out test/idrisdoc005/run.sh+2−2 test/idrisdoc006/A/fully/Qualified/NAME.idr+2−2 test/idrisdoc006/B.idr+2−1 test/idrisdoc006/expected.out test/idrisdoc006/run.sh+3−3 test/idrisdoc007/expected.out test/idrisdoc007/run.sh+2−2 test/idrisdoc008/Abstract.idr+2−2 test/idrisdoc008/Visible.idr+2−2 test/idrisdoc008/expected.out test/idrisdoc008/run.sh+2−2 test/idrisdoc009/Test.idr+2 test/idrisdoc009/expected.out+2 test/idrisdoc009/input.in test/idrisdoc009/run−3 test/idrisdoc009/run.sh+3 test/interactive001/expected−13 test/interactive001/expected.out+20 test/interactive001/input−6 test/interactive001/input.in+8 test/interactive001/interactive001.idr+9 test/interactive001/run−3 test/interactive001/run.sh+5 test/interactive002/expected.out+1−1 test/interactive002/input.in test/interactive002/run−3 test/interactive002/run.sh+3 test/interactive003/expected.out+1 test/interactive003/input.in+1 test/interactive003/interactive003.idr+5 test/interactive003/run−3 test/interactive003/run.sh+3 test/interactive004/expected−2 test/interactive004/expected.out+2 test/interactive004/input.in test/interactive004/run−3 test/interactive004/run.sh+3 test/interactive005/expected.out+4−4 test/interactive005/input.in test/interactive005/run−6 test/interactive005/run.sh+6 test/interactive006/expected.out test/interactive006/input.in test/interactive006/run−3 test/interactive006/run.sh+3 test/interactive007/expected.msys−1 test/interactive007/expected.out test/interactive007/input.in test/interactive007/run−2 test/interactive007/run.sh+2 test/interactive008/expected.out test/interactive008/input.in test/interactive008/run−2 test/interactive008/run.sh+2 test/interactive009/expected.out+1 test/interactive009/input.in+1 test/interactive009/interactive009.idr+27 test/interactive009/run.sh+3 test/interactive010/expected.out+24 test/interactive010/input.in+9 test/interactive010/run.sh+2 test/interactive011/.gitignore+1 test/interactive011/expected.out+3 test/interactive011/input.in+2 test/interactive011/interactive011.ipkg+8 test/interactive011/run.sh+6 test/interactive011/src/Foo.idr+5 test/interactive011/src/Main.idr+14 test/interactive012/expected.out+33 test/interactive012/input.in+9 test/interactive012/interactive012.idr+26 test/interactive012/run.sh+3 test/interactive013/expected.out+4 test/interactive013/input.in+1 test/interactive013/interactive013.idr+4 test/interactive013/run.sh+3 test/interactive014/expected.out+7 test/interactive014/input.in+5 test/interactive014/interactive014.idr+10 test/interactive014/run.sh+3 test/interactive015/expected.out+6 test/interactive015/input.in+2 test/interactive015/run.sh+8 test/interactive015/src/interactive015.idr+4 test/interactive016/expected.out+7 test/interactive016/input.in+2 test/interactive016/run.sh+8 test/interactive016/src/interactive016.idr+7 test/interactive017/TestMod.idr+5 test/interactive017/expected.out+7 test/interactive017/run.sh+9 test/interactive017/shebang-args.idr+6 test/interactive017/shebang-import.idr+6 test/interactive017/shebang-node.idr+4 test/interactive017/shebang.idr+4 test/interactive018/Imported1.idr+10 test/interactive018/Imported2.idr+8 test/interactive018/Public1.idr+10 test/interactive018/Public2.idr+8 test/interactive018/Top.idr+11 test/interactive018/expected.out+20 test/interactive018/input.in+20 test/interactive018/run.sh+3 test/interfaces001/InterfaceName.idr+8−8 test/interfaces001/expected.out+6−5 test/interfaces001/input.in test/interfaces001/run.sh+3 test/interfaces002/expected.out+1 test/interfaces002/interfaces002.idr+38 test/interfaces002/run.sh+4 test/interfaces003/expected.out+2 test/interfaces003/interfaces003.idr+22 test/interfaces003/run.sh+4 test/interfaces004/expected.out+4 test/interfaces004/interfaces004.idr+35 test/interfaces004/run.sh+4 test/interfaces005/expected.out+7 test/interfaces005/interfaces005.idr+53 test/interfaces005/interfaces005a.idr+50 test/interfaces005/interfaces005b.idr+50 test/interfaces005/run.sh+5 test/interfaces006/expected.out test/interfaces006/interfaces006.idr+19 test/interfaces006/run.sh+3 test/interfaces007/expected.out+1 test/interfaces007/interfaces007.idr+52 test/interfaces007/run.sh+4 test/interfaces008/expected.out+6 test/interfaces008/interfaces008.idr+20 test/interfaces008/run.sh+3 test/interfaces009/expected.out test/interfaces009/interfaces009.idr+24 test/interfaces009/run.sh+3 test/interfaces010/expected.out test/interfaces010/interfaces010.idr+12 test/interfaces010/run.sh+3 test/interpret001/double-echo.idr+6 test/interpret001/expected.out+2 test/interpret001/input.in+2 test/interpret001/run.sh+3 test/interpret002/expected.out+4 test/interpret002/file-error.idr+6 test/interpret002/input.in+2 test/interpret002/readable.txt+1 test/interpret002/run.sh+3 test/interpret003/expected.out+1 test/interpret003/input.in+1 test/interpret003/interpret003.idr+4 test/interpret003/run.sh+3 test/interpret003/test test/io001/expected.out test/io001/run.sh+1−1 test/io001/test004.idr+8−8 test/io002/expected.out test/io002/run.sh+1−1 test/io002/test008.idr+1−1 test/io003/expected.out test/io003/run−6 test/io003/run.sh+6 test/io003/test018.idr+5−4 test/io003/test018a.idr+4−4 test/layout001/expected.out+82 test/layout001/layout001a.idr+5 test/layout001/layout001b.idr+5 test/layout001/layout001c.idr+3 test/layout001/layout001d.idr+3 test/layout001/layout001e.idr+6 test/layout001/layout001f.idr+6 test/layout001/layout001g.idr+6 test/layout001/layout001h.idr+6 test/layout001/layout001i.idr+6 test/layout001/layout001j.idr+6 test/layout001/layout001k.idr+6 test/layout001/layout001l.idr+6 test/layout001/layout001n.idr+33 test/layout001/mplus1.idr+17 test/layout001/mplus2.idr+17 test/layout001/mplus3.idr+17 test/layout001/run.sh+22 test/literate001/Lit.lidr+2−2 test/literate001/expected−7 test/literate001/expected.out+12 test/literate001/run−5 test/literate001/run.sh+5 test/meta001/Finite.idr+40−38 test/meta001/expected.out test/meta001/run−3 test/meta001/run.sh+3 test/meta002/AgdaStyleReflection.idr+320 test/meta002/DataDef.idr+75 test/meta002/Deriving.idr+35 test/meta002/Tacs.idr+63−15 test/meta002/expected−3 test/meta002/expected.out+25 test/meta002/run−3 test/meta002/run.sh+7 test/meta003/BadDef.idr+4−2 test/meta003/Catch.idr+17 test/meta003/expected−6 test/meta003/expected.out+12 test/meta003/run−3 test/meta003/run.sh+5 test/meta004/expected.out+7 test/meta004/meta004.idr+50 test/meta004/run.sh+3 test/mktest.pl+1−1 test/pkg001/Main.idr+8 test/pkg001/expected.out+23 test/pkg001/run.sh+8 test/pkg001/test-pkg.ipkg+17 test/pkg002/Main.idr+4 test/pkg002/expected.out test/pkg002/run.sh+5 test/pkg002/test.ipkg+8 test/pkg003/Main.idr+4 test/pkg003/expected.out test/pkg003/run.sh+6 test/pkg003/test.ipkg+7 test/pkg004/Main.idr+4 test/pkg004/expected.out+6 test/pkg004/run.sh+6 test/pkg004/test.ipkg+8 test/pkg005/expected.out+1 test/pkg005/run.sh+3 test/pkg005/test.ipkg+3 test/pkg006/expected.out+1 test/pkg006/run.sh+3 test/pkg006/test.ipkg+3 test/pkg007/expected.out+1 test/pkg007/input.in+4 test/pkg007/run.sh+7 test/pkg007/toy/Toy.idr+4 test/pkg007/toy/Toy/Vehicle.idr+4 test/pkg007/toy/Toy/Vehicle/Car.idr+3 test/pkg007/toy/toy.ipkg+7 test/pkg008/expected.out+13 test/pkg008/maths.ipkg+10 test/pkg008/run.sh+11 test/pkg008/src/NumOps.idr+9 test/pkg008/src/Test.idr+21 test/pkg009/datatype.ipkg+6 test/pkg009/expected.out+9 test/pkg009/run.sh+7 test/pkg009/src/Data/Type.idr+3 test/pkg010/expected.out+29 test/pkg010/run.sh+2 test/pkg010/wrongopts.ipkg+3 test/prelude001/expected.out+10 test/prelude001/prelude001.idr+14 test/prelude001/run.sh+4 test/primitives001/expected−6 test/primitives001/expected.out+27 test/primitives001/input.in+2 test/primitives001/run−4 test/primitives001/run.sh+6 test/primitives001/substring.idr+58 test/primitives001/test005.idr−1 test/primitives002/expected.out+13−13 test/primitives002/run−52 test/primitives002/run.sh+54 test/primitives003/expected.out+4 test/primitives003/run−5 test/primitives003/run.sh+5 test/primitives003/test038.idr+14−10 test/primitives004-disabled/expected.out test/primitives004-disabled/run−4 test/primitives004-disabled/run.sh+4 test/primitives005/expected.out+2 test/primitives005/primitives005.idr+24 test/primitives005/run.sh+5 test/primitives006/Data/ByteArray.idr+100 test/primitives006/Data/Bytes.idr+286 test/primitives006/array.c+62 test/primitives006/array.h+18 test/primitives006/expected.out+9 test/primitives006/load-test.idr+48 test/primitives006/run.sh+6 test/proof001/expected.out+12 test/proof001/run−3 test/proof001/run.sh+3 test/proof001/test029.idr+4−5 test/proof002/Reflect.idr+51−51 test/proof002/expected−13 test/proof002/expected.out+37 test/proof002/run−4 test/proof002/run.sh+4 test/proof002/test030.idr−1 test/proof003/Parity.idr+8−6 test/proof003/expected−3 test/proof003/expected.out+39 test/proof003/run.sh+1−1 test/proof003/test015.idr+36−30 test/proof004/expected.out test/proof004/run−3 test/proof004/run.sh+3 test/proof005/DefaultArgSubstitutionSuccess.idr+4−4 test/proof005/expected.out test/proof005/run−3 test/proof005/run.sh+3 test/proof006/DefaultArgSubstitutionSyntax.idr+4−4 test/proof006/expected.out test/proof006/run−3 test/proof006/run.sh+3 test/proof007/expected−4 test/proof007/expected.out+10 test/proof007/run−3 test/proof007/run.sh+3 test/proof008/expected.out+6 test/proof008/run−3 test/proof008/run.sh+3 test/proof009/expected.out+6−5 test/proof009/input.in test/proof009/run−3 test/proof009/run.sh+3 test/proof010/expected.out test/proof010/proof010.idr+6−6 test/proof010/run.sh+1−1 test/proof011/expected.out+28 test/proof011/proof011.idr+21 test/proof011/proof011a.idr+14 test/proof011/run.sh+4 test/proofsearch001/expected.out test/proofsearch001/proofsearch001.idr+11 test/proofsearch001/run.sh+3 test/proofsearch002/Process.idr+444 test/proofsearch002/expected.out test/proofsearch002/proofsearch002.idr+48 test/proofsearch002/run.sh+3 test/proofsearch003/expected.out test/proofsearch003/proofsearch003.idr+34 test/proofsearch003/run.sh+3 test/pruviloj001/expected.out test/pruviloj001/pruviloj001.idr+84 test/pruviloj001/run.sh+3 test/quasiquote001/QuasiquoteBasics.idr−3 test/quasiquote001/expected−5 test/quasiquote001/expected.out+5 test/quasiquote001/run.sh+1−1 test/quasiquote002/expected.out test/quasiquote002/run.sh+1−1 test/quasiquote003/expected−2 test/quasiquote003/expected.out+9 test/quasiquote003/run−3 test/quasiquote003/run.sh+3 test/quasiquote004/expected−3 test/quasiquote004/expected.out+27 test/quasiquote004/run−3 test/quasiquote004/run.sh+3 test/quasiquote005/expected.out test/quasiquote005/run−3 test/quasiquote005/run.sh+3 test/quasiquote006/expected−13 test/quasiquote006/expected.out+31 test/quasiquote006/quasiquote006.idr+2−2 test/quasiquote006/run−3 test/quasiquote006/run.sh+3 test/records001/expected.out test/records001/run.sh+1−1 test/records002/expected.out test/records002/record002.idr+1−1 test/records002/run.sh+1−1 test/records003/expected.out test/records003/run.sh+1−1 test/records004/expected.out+3 test/records004/records004.idr+13 test/records004/run.sh+4 test/records005/expected.out+4 test/records005/records005.idr+39 test/records005/run.sh+4 test/reg001/Area.idr+12 test/reg001/TestEx.idr+31 test/reg001/expected.out+3 test/reg001/reg001.idr−8 test/reg001/run−4 test/reg001/run.sh+4 test/reg002/expected.out test/reg002/run.sh+1−1 test/reg003/expected−6 test/reg003/run−4 test/reg004/expected.out test/reg004/run.sh+1−1 test/reg005/expected.out+3 test/reg005/reg005.idr+6−9 test/reg005/run−3 test/reg005/run.sh+4 test/reg006/expected−2 test/reg006/run−3 test/reg007/expected.out+3−1 test/reg007/run−3 test/reg007/run.sh+3 test/reg009/reg009.lidr−21 test/reg009/run−3 test/reg010/expected−3 test/reg010/run−2 test/reg011/reg011.idr−11 test/reg011/run−3 test/reg012/reg012.lidr−36 test/reg012/run−3 test/reg013/expected.out test/reg013/run.sh+1−1 test/reg014/reg014.idr−14 test/reg014/run−3 test/reg015/reg015.idr−3 test/reg015/run−3 test/reg016/expected.out test/reg016/run.sh+1−1 test/reg017/expected−1 test/reg017/expected.out+13 test/reg017/run−4 test/reg017/run.sh+4 test/reg018/expected−10 test/reg018/run−6 test/reg019/reg019.idr−7 test/reg019/run−3 test/reg020/expected.out test/reg020/run.sh+1−1 test/reg021/reg021.idr−22 test/reg021/run−3 test/reg022/reg022.idr−18 test/reg022/run−3 test/reg023/expected−5 test/reg023/run−3 test/reg024/expected.out test/reg024/run.sh+1−1 test/reg025/expected.out test/reg025/run.sh+1−1 test/reg026/reg026.idr−16 test/reg026/run−3 test/reg027/expected−4 test/reg027/expected.out+7 test/reg027/reg027.idr+3−18 test/reg027/reg027a.idr+2−2 test/reg027/run−5 test/reg027/run.sh+5 test/reg028/expected−4 test/reg028/run−4 test/reg029/expected.out test/reg029/run.sh+2−2 test/reg030/reg030.idr−15 test/reg030/run−3 test/reg031/expected.out test/reg031/run.sh+1−1 test/reg032/expected.out test/reg032/run.sh+1−1 test/reg033/reg033.idr−12 test/reg033/run−3 test/reg034/expected−4 test/reg034/run−3 test/reg035/expected−1 test/reg035/run−5 test/reg036/run−3 test/reg037/run−3 test/reg038/run−3 test/reg039/expected.out test/reg039/run−35 test/reg039/run.sh+8 test/reg040/expected.out test/reg040/reg040.idr+1−1 test/reg040/run−6 test/reg040/run.sh+6 test/reg041/expected−2 test/reg041/expected.out+2 test/reg041/ott.idr+24−25 test/reg041/run−5 test/reg041/run.sh+5 test/reg042/expected.out test/reg042/run.sh+1−1 test/reg044/expected−11 test/reg044/run−3 test/reg045/expected.out test/reg045/reg045.idr+1−1 test/reg045/run.sh+1−1 test/reg046/reg046.idr−19 test/reg046/run−3 test/reg047/reg047.idr−18 test/reg047/reg047a.idr−24 test/reg047/run−4 test/reg048/expected test/reg048/expected.out test/reg048/reg048.idr+1−1 test/reg048/run−4 test/reg048/run.sh+4 test/reg049/expected−4 test/reg049/run−3 test/reg050/expected−10 test/reg050/run−5 test/reg051-disabled/expected test/reg051-disabled/expected.out test/reg051-disabled/run−3 test/reg051-disabled/run.sh+3 test/reg052/expected.out test/reg052/reg052.idr+2−2 test/reg052/run.sh+1−1 test/reg053/expected test/reg053/run−3 test/reg054/expected−13 test/reg054/run−2 test/reg055/expected−9 test/reg055/run−5 test/reg056/expected−2 test/reg056/run−3 test/reg057/expected test/reg057/run−3 test/reg058/expected test/reg058/run−5 test/reg059/expected test/reg059/run−3 test/reg060/expected test/reg060/reg060.idr−12 test/reg060/run−3 test/reg061/expected test/reg061/run−3 test/reg062/expected test/reg062/reg062.lidr−41 test/reg062/run−4 test/reg063/expected test/reg063/run−3 test/reg064/expected test/reg064/reg064.idr−9 test/reg064/run−3 test/reg065/expected test/reg065/run−3 test/reg066/expected test/reg066/run−3 test/reg067/expected.out+1 test/reg067/reg067.idr+23 test/reg067/run.sh+5 test/reg075/expected.out+6 test/reg075/input.in+1 test/reg075/reg075.idr+33 test/reg075/run.sh+3 test/reg076/expected.out+1 test/reg076/input.in test/reg076/reg076.idr+11 test/reg076/run.sh+4 test/reg077/expected.out test/reg077/reg077.idr+17 test/reg077/run.sh+3 test/regression001/coverage001.idr+79 test/regression001/eff001.idr+39 test/regression001/expected.out test/regression001/reg001.idr+209 test/regression001/reg002.idr+8 test/regression001/reg003.idr+11 test/regression001/reg004.lidr+43 test/regression001/reg005.idr+8 test/regression001/reg006.idr+14 test/regression001/reg007.idr+69 test/regression001/reg036.idr+2−2 test/regression001/reg037.idr+2−2 test/regression001/reg038.idr+4−4 test/regression001/reg046.idr+19 test/regression001/reg047.idr+18 test/regression001/reg047a.idr+24 test/regression001/reg053.idr test/regression001/reg057.idr test/regression001/reg058.idr+2−2 test/regression001/reg058a.idr test/regression001/reg059.idr+2−2 test/regression001/reg060.idr+12 test/regression001/reg061.idr test/regression001/reg062.idr test/regression001/reg063.idr test/regression001/reg064.idr+8 test/regression001/reg065.idr+6−6 test/regression001/reg066.idr test/regression001/reg071.idr+19 test/regression001/reg073.lidr+24 test/regression001/reg074.idr+21 test/regression001/run.sh+18 test/regression002/A.lidr+1−1 test/regression002/Canonicity.idr+13 test/regression002/DoubleEquality.idr+5 test/regression002/Mod.idr+12 test/regression002/Negation.idr+2 test/regression002/badbangop.idr test/regression002/baddoublebang.idr test/regression002/expected.out+368 test/regression002/reg001.idr+2 test/regression002/reg002.idr+3 test/regression002/reg003.idr test/regression002/reg003a.idr test/regression002/reg006.idr+3−2 test/regression002/reg007.lidr test/regression002/reg010.idr test/regression002/reg018a.idr test/regression002/reg018b.idr+1−1 test/regression002/reg018c.idr test/regression002/reg018d.idr test/regression002/reg023.idr test/regression002/reg028.idr test/regression002/reg028a.idr test/regression002/reg034.idr test/regression002/reg035.idr test/regression002/reg035a.lidr+7−8 test/regression002/reg035b.idr test/regression002/reg044.idr test/regression002/reg049.idr test/regression002/reg054.idr test/regression002/reg055.idr test/regression002/reg055a.idr test/regression002/reg056.idr+1−2 test/regression002/reg068.idr+4 test/regression002/reg069.idr+5 test/regression002/reg070.idr+15 test/regression002/reg076.idr+7 test/regression002/reg077.idr+2 test/regression002/run.sh+41 test/regression002/working.idr test/regression003/expected.out+1 test/regression003/regression003.idr+56 test/regression003/run.sh+4 test/runtest.pl−160 test/scripts/timeout+17 test/sourceLocation001/SourceLoc.idr+1 test/sourceLocation001/expected−11 test/sourceLocation001/expected.out+35 test/sourceLocation001/run.sh+1−1 test/st001/expected.out+8 test/st001/run.sh+6 test/st001/test001.idr+66 test/st001/testFile.in+2 test/st002/expected.out+8 test/st002/run.sh+6 test/st002/test002.idr+66 test/st002/testFile.in+2 test/st003/expected.out+8 test/st003/run.sh+6 test/st003/test003.idr+25 test/st003/testFile.in+2 test/st004/expected.out+6 test/st004/run.sh+6 test/st004/test004.idr+24 test/st005/expected.out+6 test/st005/run.sh+7 test/st005/test005.idr+33 test/st006/expected.out+5 test/st006/run.sh+6 test/st006/test006.idr+37 test/st007/expected.out+6 test/st007/run.sh+6 test/st007/test007.idr+24 test/sugar001/expected.out test/sugar001/run.sh+1−1 test/sugar001/test007.idr+2−2 test/sugar002/expected.out test/sugar002/run.sh+1−1 test/sugar003/expected.out test/sugar003/run.sh+1−1 test/sugar003/test013.idr+1−1 test/sugar004/expected.out+1 test/sugar004/run.sh+2−1 test/sugar004/sugar004.idr+12−1 test/sugar005/As.idr+1−1 test/sugar005/expected.out test/sugar005/run.sh+1−1 test/syntax001/expected−12 test/syntax001/expected.out+26 test/syntax001/run−4 test/syntax001/run.sh+4 test/syntax002/expected.out+2 test/syntax002/run.sh+4 test/syntax002/syntax002.idr+22 test/tactics001/Tactics.idr+8−6 test/tactics001/expected test/tactics001/expected.out test/tactics001/run−3 test/tactics001/run.sh+3 test/totality001/expected−6 test/totality001/expected.out+18 test/totality001/run−6 test/totality001/run.sh+6 test/totality002/expected−4 test/totality002/expected.out+18 test/totality002/run−5 test/totality002/run.sh+5 test/totality002/test017.idr+6−6 test/totality003/expected.out+5−1 test/totality003/run−4 test/totality003/run.sh+4 test/totality004/expected−5 test/totality004/expected.out+13 test/totality004/run−5 test/totality004/run.sh+5 test/totality004/totality004.idr+7−7 test/totality004/totality004a.idr+7−8 test/totality005/expected.out test/totality005/run−5 test/totality005/run.sh+5 test/totality006/expected−5 test/totality006/expected.out+18 test/totality006/run−5 test/totality006/run.sh+5 test/totality007/expected.msys+2−2 test/totality007/expected.out+9 test/totality007/run−3 test/totality007/run.sh+3 test/totality008/expected−2 test/totality008/expected.out+6 test/totality008/run−3 test/totality008/run.sh+3 test/totality008/totality008.idr+4−4 test/totality009/TestLambdaPossible.idr+1 test/totality009/TestLambdaPossible2.idr+16 test/totality009/expected−8 test/totality009/expected.out+60 test/totality009/run−5 test/totality009/run.sh+6 test/totality010/expected.out+12 test/totality010/run.sh+3 test/totality010/totality010.idr+31 test/totality011/expected.out+6 test/totality011/run.sh+3 test/totality011/totality011.lidr+31 test/totality012/expected.out+12 test/totality012/run.sh+5 test/totality012/totality012.idr+30 test/totality012/totality012a.idr+12 test/totality012/totality012b.idr+18 test/totality013/expected.out+12 test/totality013/run.sh+4 test/totality013/totality013.idr+16 test/totality013/totality013a.idr+17 test/totality014/expected.out+13 test/totality014/run.sh+3 test/totality014/totality014.idr+7 test/totality015/expected.out+18 test/totality015/run.sh+4 test/totality015/totality015.idr+70 test/totality015/totality015a.idr+63 test/totality016/expected.out+54 test/totality016/run.sh+3 test/totality016/totality016.idr+48 test/totality017/expected.out+36 test/totality017/run.sh+3 test/totality017/totality017.idr+49 test/totality018/expected.out+6 test/totality018/run.sh+3 test/totality018/totality018.idr+15 test/totality019/expected.out+12 test/totality019/run.sh+4 test/totality019/totality019.idr+14 test/totality019/totality019a.idr+81 test/totality020/expected.out+12 test/totality020/run.sh+3 test/totality020/totality020.idr+11 test/totality021/expected.out+30 test/totality021/run.sh+4 test/totality021/totality021.idr+18 test/totality021/totality021a.idr+12 test/totality022/expected.out+6 test/totality022/run.sh+3 test/totality022/totality022.idr+11 test/totality023/expected.out+6 test/totality023/run.sh+3 test/totality023/totality023.idr+11 test/totality024/expected.out+1 test/totality024/run.sh+3 test/totality024/totality023.idr+7 test/totality025/expected.out+18 test/totality025/run.sh+3 test/totality025/totality025.idr+17 test/totality026/expected.out+6 test/totality026/run.sh+3 test/totality026/totality026.idr+7 test/tutorial001/expected test/tutorial001/expected.out test/tutorial001/run−3 test/tutorial001/run.sh+3 test/tutorial002/expected test/tutorial002/expected.out+18 test/tutorial002/run−3 test/tutorial002/run.sh+3 test/tutorial002/tutorial002.idr+16−16 test/tutorial003/expected test/tutorial003/expected.out test/tutorial003/run−3 test/tutorial003/run.sh+3 test/tutorial003/tutorial003.idr+2−2 test/tutorial004/expected test/tutorial004/expected.out+12 test/tutorial004/run−3 test/tutorial004/run.sh+3 test/tutorial005/expected test/tutorial005/expected.out test/tutorial005/run−3 test/tutorial005/run.sh+3 test/tutorial006/expected−24 test/tutorial006/expected.out+37 test/tutorial006/run−4 test/tutorial006/run.sh+5 test/tutorial006/tutorial006b.idr+6−6 test/tutorial006/tutorial006c.idr+20 test/tutorial007/Providers.idr+27 test/tutorial007/expected.out+1 test/tutorial007/nativetypes.c+13 test/tutorial007/run.sh+5 test/tutorial007/tutorial007.idr+12 test/unique001/expected−21 test/unique001/expected.out+4 test/unique001/run−9 test/unique001/run.sh+6 test/unique001/unique001.idr+2 test/unique002/expected−5 test/unique002/run−4 test/unique003/expected−4 test/unique003/run−3 test/unique004/expected.out+75 test/unique004/run.sh+14 test/unique004/unique001a.idr+2 test/unique004/unique001b.idr+2 test/unique004/unique001c.idr+4−7 test/unique004/unique001d.idr+1 test/unique004/unique001e.idr+1 test/unique004/unique002.idr+3−1 test/unique004/unique002a.idr+3−1 test/unique004/unique003.idr+3−1 test/universes001/expected.out+14 test/universes001/run.sh+3 test/universes001/universes001.idr+8 test/universes002/expected.out+14 test/universes002/run.sh+3 test/universes002/universes002.idr+45 test/views001/expected.out+5 test/views001/run.sh+6 test/views001/views001.idr+43 test/views001/views001a.idr+29 test/views002/expected.out+2 test/views002/run.sh+4 test/views002/views002.idr+26 test/views003/expected.out+1 test/views003/run.sh+4 test/views003/views003.idr+31
.github/ISSUE_TEMPLATE.mdnew file+9
@@ -0,0 +1,9 @@
1+Please attach complete source files that exhibit the issue in addition
2+to quoting from them here.
3+
4+# Steps to Reproduce
5+
6+# Expected Behavior
7+
8+# Observed Behavior
9+
.gitignore+39−14
@@ -1,30 +1,55 @@
1+# Build artefacts
12dist
2−cabal-dev/
3−.cabal-sandbox
4−cabal.sandbox.config
5−cabal.config
6−.hsenv
3+dist-newstyle
74*.ibc
85*.o
96*.a
107*.so
118*.dll
129*.dylib
13−*.swp
14−*~
15−.DS_Store
16−.hpc
17−*.tix
18−.projectile
19−.dir-locals.el
20−custom.mk
10+src/Version_idris.hs
11+
12+# Doc generation artefacts
2113libs/base/base_doc/
2214libs/effects/effects_doc/
2315libs/prelude/prelude_doc/
2416libs/contrib/contrib_doc/
17+libs/pruviloj/pruviloj_doc/
18+libs/oldeffects/oldeffects_doc/
19+
20+# Test artefacts
2521test/output
2622test/*[0-9][0-9][0-9]/output
2723test/*[0-9][0-9][0-9]/*.exe
24+test/runtest.exe
25+test/runtest
26+.tasty-rerun-log
27+
28+# Haskell build tools
29+cabal-dev/
30+.cabal-sandbox
31+cabal.sandbox.config
32+cabal.config
33+.stack-work
34+.hsenv
35+
36+# For convenience
37+custom.mk
38+\#*
39+.\#*
2840tags
2941TAGS
30−src/Version_idris.hs
42+
43+# IDE and editors
44+*.swp
45+*~
46+.DS_Store
47+.hpc
48+*.orig
49+*.tix
50+*.dSYM
51+.projectile
52+.dir-locals.el
53+.vscode
54+.idea
55+
.hlint.yamlnew file+61
@@ -0,0 +1,61 @@
1+# HLint configuration file
2+# https://github.com/ndmitchell/hlint
3+##########################
4+
5+# This file contains a template configuration file, which is typically
6+# placed as .hlint.yaml in the root of your project
7+
8+
9+# Specify additional command line arguments
10+#
11+# - arguments: [--color, --cpp-simple, -XQuasiQuotes]
12+
13+
14+# Control which extensions/flags/modules/functions can be used
15+#
16+# - extensions:
17+# - default: false # all extension are banned by default
18+# - name: [PatternGuards, ViewPatterns] # only these listed extensions can be used
19+# - {name: CPP, within: CrossPlatform} # CPP can only be used in a given module
20+#
21+# - flags:
22+# - {name: -w, within: []} # -w is allowed nowhere
23+#
24+# - modules:
25+# - {name: [Data.Set, Data.HashSet], as: Set} # if you import Data.Set qualified, it must be as 'Set'
26+# - {name: Control.Arrow, within: []} # Certain modules are banned entirely
27+#
28+# - functions:
29+# - {name: unsafePerformIO, within: []} # unsafePerformIO can only appear in no modules
30+
31+
32+# Add custom hints for this project
33+#
34+# Will suggest replacing "wibbleMany [myvar]" with "wibbleOne myvar"
35+# - error: {lhs: "wibbleMany [x]", rhs: wibbleOne x}
36+
37+
38+# Turn on hints that are off by default
39+#
40+# Ban "module X(module X) where", to require a real export list
41+# - warn: {name: Use explicit module export list}
42+#
43+# Replace a $ b $ c with a . b $ c
44+# - group: {name: dollar, enabled: true}
45+#
46+# Generalise map to fmap, ++ to <>
47+# - group: {name: generalise, enabled: true}
48+
49+
50+# Ignore some builtin hints
51+# - ignore: {name: Use let}
52+# - ignore: {name: Use const, within: SpecialModule} # Only within certain modules
53+- ignore: {name: Use camelCase}
54+- ignore: {name: Reduce duplication}
55+
56+# Define some custom infix operators
57+# - fixity: infixr 3 ~^#^~
58+
59+
60+# To generate a suitable file for HLint do:
61+# $ hlint --default > .hlint.yaml
.stylish-haskell.yamlnew file+154
@@ -0,0 +1,154 @@
1+# stylish-haskell configuration file
2+# ==================================
3+
4+# The stylish-haskell tool is mainly configured by specifying steps. These steps
5+# are a list, so they have an order, and one specific step may appear more than
6+# once (if needed). Each file is processed by these steps in the given order.
7+steps:
8+ # Convert some ASCII sequences to their Unicode equivalents. This is disabled
9+ # by default.
10+ # - unicode_syntax:
11+ # # In order to make this work, we also need to insert the UnicodeSyntax
12+ # # language pragma. If this flag is set to true, we insert it when it's
13+ # # not already present. You may want to disable it if you configure
14+ # # language extensions using some other method than pragmas. Default:
15+ # # true.
16+ # add_language_pragma: true
17+
18+ # Import cleanup
19+ - imports:
20+ # There are different ways we can align names and lists.
21+ #
22+ # - global: Align the import names and import list throughout the entire
23+ # file.
24+ #
25+ # - file: Like global, but don't add padding when there are no qualified
26+ # imports in the file.
27+ #
28+ # - group: Only align the imports per group (a group is formed by adjacent
29+ # import lines).
30+ #
31+ # - none: Do not perform any alignment.
32+ #
33+ # Default: global.
34+ align: none
35+
36+ # Folowing options affect only import list alignment.
37+ #
38+ # List align has following options:
39+ #
40+ # - after_alias: Import list is aligned with end of import including
41+ # 'as' and 'hiding' keywords.
42+ #
43+ # > import qualified Data.List as List (concat, foldl, foldr, head,
44+ # > init, last, length)
45+ #
46+ # - with_alias: Import list is aligned with start of alias or hiding.
47+ #
48+ # > import qualified Data.List as List (concat, foldl, foldr, head,
49+ # > init, last, length)
50+ #
51+ # - new_line: Import list starts always on new line.
52+ #
53+ # > import qualified Data.List as List
54+ # > (concat, foldl, foldr, head, init, last, length)
55+ #
56+ # Default: after_alias
57+ list_align: after_alias
58+
59+ # Long list align style takes effect when import is too long. This is
60+ # determined by 'columns' setting.
61+ #
62+ # - inline: This option will put as much specs on same line as possible.
63+ #
64+ # - new_line: Import list will start on new line.
65+ #
66+ # - new_line_multiline: Import list will start on new line when it's
67+ # short enough to fit to single line. Otherwise it'll be multiline.
68+ #
69+ # - multiline: One line per import list entry.
70+ # Type with contructor list acts like single import.
71+ #
72+ # > import qualified Data.Map as M
73+ # > ( empty
74+ # > , singleton
75+ # > , ...
76+ # > , delete
77+ # > )
78+ #
79+ # Default: inline
80+ long_list_align: inline
81+
82+ # List padding determines indentation of import list on lines after import.
83+ # This option affects 'list_align' and 'long_list_align'.
84+ list_padding: 4
85+
86+ # Separate lists option affects formating of import list for type
87+ # or class. The only difference is single space between type and list
88+ # of constructors, selectors and class functions.
89+ #
90+ # - true: There is single space between Foldable type and list of it's
91+ # functions.
92+ #
93+ # > import Data.Foldable (Foldable (fold, foldl, foldMap))
94+ #
95+ # - false: There is no space between Foldable type and list of it's
96+ # functions.
97+ #
98+ # > import Data.Foldable (Foldable(fold, foldl, foldMap))
99+ #
100+ # Default: true
101+ separate_lists: false
102+
103+ # Language pragmas
104+ - language_pragmas:
105+ # We can generate different styles of language pragma lists.
106+ #
107+ # - vertical: Vertical-spaced language pragmas, one per line.
108+ #
109+ # - compact: A more compact style.
110+ #
111+ # - compact_line: Similar to compact, but wrap each line with
112+ # `{-#LANGUAGE #-}'.
113+ #
114+ # Default: vertical.
115+ style: compact
116+
117+ # Align affects alignment of closing pragma brackets.
118+ #
119+ # - true: Brackets are aligned in same collumn.
120+ #
121+ # - false: Brackets are not aligned together. There is only one space
122+ # between actual import and closing bracket.
123+ #
124+ # Default: true
125+ align: true
126+
127+ # stylish-haskell can detect redundancy of some language pragmas. If this
128+ # is set to true, it will remove those redundant pragmas. Default: true.
129+ remove_redundant: true
130+
131+ # Align the types in record declarations
132+ # - records: {}
133+
134+ # Replace tabs by spaces. This is disabled by default.
135+ - tabs:
136+ # # Number of spaces to use for each tab. Default: 8, as specified by the
137+ # # Haskell report.
138+ spaces: 8
139+
140+ # Remove trailing whitespace
141+ - trailing_whitespace: {}
142+
143+# A common setting is the number of columns (parts of) code will be wrapped
144+# to. Different steps take this into account. Default: 80.
145+columns: 80
146+
147+# Sometimes, language extensions are specified in a cabal file or from the
148+# command line instead of using language pragmas in the file. stylish-haskell
149+# needs to be aware of these, so it can parse the file correctly.
150+#
151+# No language extensions are enabled by default.
152+# language_extensions:
153+ # - TemplateHaskell
154+ # - QuasiQuotes
.travis.yml+170−33
@@ -1,39 +1,176 @@
1−language: haskell
2−ghc:
3− # Idris won't build on 7.4 and earlier due to dependency
4− # problems. 7.10 isn't yet supported on Travis.
5− - 7.6
6− - 7.8
1+dist: xenial
2+
3+language: c
4+
5+env:
6+ global:
7+ - PKGNAME=idris
8+
9+matrix:
10+ include:
11+ - env: CABALVER="2.4" GHCVER="8.6.5" STACKVER="15.4" STYLISH=YES
12+ addons: {apt: {packages: [cabal-install-2.4,ghc-8.6.5,hscolour], sources: [hvr-ghc]}}
13+ - env: CABALVER="2.4" GHCVER="8.2.2" TESTS="lib_doc doc"
14+ compiler: ": #GHC 8.2.2"
15+ addons: {apt: {packages: [cabal-install-2.4,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
16+ - env: CABALVER="2.4" GHCVER="8.2.2" TESTS="test_js"
17+ compiler: ": #GHC 8.2.2"
18+ addons: {apt: {packages: [cabal-install-2.4,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
19+ - env: CABALVER="2.4" GHCVER="8.2.2" TESTS="test_c"
20+ compiler: ": #GHC 8.2.2"
21+ addons: {apt: {packages: [cabal-install-2.4,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
22+ - env: CABALVER="2.4" GHCVER="8.4.4" TESTS="lib_doc doc"
23+ compiler: ": #GHC 8.4.4"
24+ addons: {apt: {packages: [cabal-install-2.4,ghc-8.4.4,cppcheck,hscolour], sources: [hvr-ghc]}}
25+ - env: CABALVER="2.4" GHCVER="8.4.4" TESTS="test_js"
26+ compiler: ": #GHC 8.4.4"
27+ addons: {apt: {packages: [cabal-install-2.4,ghc-8.4.4,cppcheck,hscolour], sources: [hvr-ghc]}}
28+ - env: CABALVER="2.4" GHCVER="8.4.4" TESTS="test_c"
29+ compiler: ": #GHC 8.4.4"
30+ addons: {apt: {packages: [cabal-install-2.4,ghc-8.4.4,cppcheck,hscolour], sources: [hvr-ghc]}}
31+ - env: CABALVER="3.0" GHCVER="8.8.3" TESTS="lib_doc doc"
32+ compiler: ": #GHC 8.8.3"
33+ addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3,cppcheck,hscolour], sources: [hvr-ghc]}}
34+ - env: CABALVER="3.0" GHCVER="8.8.3" TESTS="test_js"
35+ compiler: ": #GHC 8.8.3"
36+ addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3,cppcheck,hscolour], sources: [hvr-ghc]}}
37+ - env: CABALVER="3.0" GHCVER="8.8.3" TESTS="test_c"
38+ compiler: ": #GHC 8.8.3"
39+ addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3,cppcheck,hscolour], sources: [hvr-ghc]}}
40+ - env: CABALVER="3.0" GHCVER="8.8.3" IDRIS2=YES
41+ addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3], sources: [hvr-ghc]}}
42+ fast-finish: true
43+
44+cache:
45+ directories:
46+ - $HOME/.cabsnap
47+ - $HOME/.cabal/packages
48+ - $HOME/.stack
49+
50+before_cache:
51+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
52+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
753
854before_install:
9− - sudo apt-get update -qq
10− - sudo apt-get install -qq libghc-unordered-containers-dev libghc-mtl-dev libghc-network-dev libghc-transformers-dev libghc-text-dev libghc-utf8-string-dev libghc-vector-dev libghc-split-dev libghc-ansi-terminal-dev libghc-ansi-wl-pprint-dev
11− # trifecta dependencies
12− - sudo apt-get install -qq libghc-blaze-builder-dev libghc-blaze-html-dev libghc-bifunctors-dev libghc-hashable-dev libghc-semigroups-dev libghc-semigroupoids-dev libghc-parallel-dev libghc-comonad-dev libghc-terminfo-dev libghc-keys-dev
13− # Haddock dependencies
14− - sudo apt-get install hscolour
15− # test dependency
16− - sudo apt-get install -qq expect
17− - sudo apt-get install -qq cppcheck
55+ - nvm install 6
56+ - nvm use 6
57+ - unset CC
58+ - if [[ $TRAVIS_OS_NAME == 'linux' ]];
59+ then
60+ export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.cabal/bin:$HOME/opt/scheme/bin/:$PATH;
61+ export SED=sed;
62+ export ZCAT=zcat;
63+ fi
64+ - env
65+ - if [[ $TRAVIS_OS_NAME == 'osx' ]];
66+ then
67+ brew outdated pkgconfig || brew install pkgconfig;
68+ brew install ghc cabal-install libffi cppcheck gnu-sed;
69+ export PATH=$HOME/.cabal/bin:$PATH;
70+ export SED=gsed;
71+ export ZCAT=gzcat;
72+ export PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig:$PKG_CONFIG_PATH;
73+ fi
74+ - if [ -n "$STYLISH" ]; then ./stylize.sh; exit $?; fi
75+ - if [ -n "$IDRIS2" ];
76+ then
77+ git clone https://github.com/edwinb/Idris2 &&
78+ wget https://github.com/cisco/ChezScheme/archive/v9.5.2.tar.gz &&
79+ tar xvzf v9.5.2.tar.gz &&
80+ cd ChezScheme-9.5.2 &&
81+ ./configure --threads --installprefix=$HOME/opt/scheme &&
82+ make -j install &&
83+ cd .. &&
84+ cabal v1-update &&
85+ travis_wait cabal v1-install &&
86+ cd Idris2 &&
87+ make idris2 && make base && make contrib;
88+ exit $?;
89+ fi
90+
1891install:
19− - cabal install -f FFI --enable-tests --dependencies-only --max-backjumps=-1
20− - ghc-pkg list
92+ - which cabal
93+ - which ghc
94+ - cabal --version
95+ - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
96+ - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
97+ then
98+ $ZCAT $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
99+ $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
100+ fi
101+ - travis_retry cabal update -v
102+ # Run build with 2 parallel jobs
103+ # The container environment reports 16 cores,
104+ # causing cabal's default configuration (jobs: $ncpus)
105+ # to run into the GHC #9221 bug which can result in longer build-times.
106+ - $SED -i -r 's/(^jobs:).*/\1 2/' $HOME/.cabal/config
107+ - cabal v1-install -f FFI --only-dependencies --enable-tests --dry -v > installplan.txt
108+ - $SED -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
109+ # check whether current requested install-plan matches cached package-db snapshot
110+ - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
111+ then
112+ echo "cabal build-cache HIT";
113+ rm -rfv .ghc;
114+ cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
115+ cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;
116+ else
117+ echo "cabal build-cache MISS";
118+ rm -rf $HOME/.cabsnap;
119+ mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
120+ cabal v1-install -f FFI --only-dependencies --enable-tests;
121+ fi
122+ # snapshot package-db on cache miss
123+ - if [ ! -d $HOME/.cabsnap ];
124+ then
125+ echo "snapshotting package-db to build-cache";
126+ mkdir $HOME/.cabsnap;
127+ cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
128+ cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
129+ fi
130+
131+
21132before_script:
22− - cabal sdist
133+ - ORIGINAL_DIR=$(pwd)
134+ - cabal v1-sdist
23135 - cd ..
24− - tar -xf Idris-dev/dist/idris*.tar.gz
25− - cd idris*
136+ - tar -xf ${ORIGINAL_DIR}/dist/${PKGNAME}*.tar.gz
137+ - cd ${PKGNAME}*
26138script:
27− - cabal configure -f FFI -f CI
28− - if [[ "$TESTS" != "doc" ]]; then cabal build; fi
29− - if [[ "$TESTS" != "doc" ]]; then cabal copy; fi
30− - if [[ "$TESTS" != "doc" ]]; then cabal register; fi
31− - if [[ "$TESTS" == "test_c" ]]; then cppcheck -j 2 --error-exitcode=1 ./rts/idris_bitstring.c ./rts/idris_bitstring.h ./rts/idris_gc.h ./rts/idris_gc.c ./rts/idris_gmp.h ./rts/idris_gmp.c ./rts/idris_heap.h ./rts/idris_heap.c ./rts/idris_main.c ./rts/idris_net.h ./rts/idris_net.c ./rts/idris_opts.h ./rts/idris_opts.c ./rts/idris_rts.h ./rts/idris_rts.c ./rts/idris_stats.h ./rts/idris_stats.c ./rts/idris_stdfgn.h ./rts/idris_stdfgn.c ./rts/libtest.c ; fi
32− - if [[ "$TESTS" == "test_llvm" ]]; then git clone --depth 1 https://github.com/idris-hackers/idris-llvm.git ; cd idris-llvm ; cabal install ; cd .. ; fi
33− - make -j2 $TESTS
34−env:
35− - TESTS="doc"
36− - TESTS="lib_doc"
37− - TESTS="test_c"
38− #- TESTS="test_llvm"
39− - TESTS="test_js"
139+ - export LD_PRELOAD=/opt/ghc/${GHCVER}/lib/ghc-${GHCVER}/rts/libffi.so.7
140+###
141+ - echo 'Configure...' && echo -en 'travis_fold:start:script.configure\\r'
142+ - cabal v1-configure -f FFI -f CI --enable-tests
143+ - echo -en 'travis_fold:end:script.configure\\r'
144+###
145+ - echo 'Build...' && echo -en 'travis_fold:start:script.build\\r'
146+ - cabal v1-build
147+ - echo -en 'travis_fold:end:script.build\\r'
148+###
149+ - echo 'Copy...' && echo -en 'travis_fold:start:script.copy\\r'
150+ - cabal v1-copy
151+ - echo -en 'travis_fold:end:script.copy\\r'
152+###
153+ - echo 'Register...' && echo -en 'travis_fold:start:script.register\\r'
154+ - cabal v1-register
155+ - echo -en 'travis_fold:end:script.register\\r'
156+###
157+ - echo 'Cppcheck...' && echo -en 'travis_fold:start:script.cppcheck\\r'
158+ - if [[ "$TESTS" == "test_c" ]]; then
159+ cppcheck -i 'mini-gmp.c' rts;
160+ fi
161+ - echo -en 'travis_fold:end:script.cppcheck\\r'
162+###
163+ - echo 'Tests...' && echo -en 'travis_fold:start:script.tests\\r'
164+ - for test in $TESTS; do
165+ echo "make TEST-JOBS=2 $test";
166+ travis_wait make TEST-JOBS=2 $test;
167+ done
168+ - echo -en 'travis_fold:end:script.tests\\r'
169+###
170+ - echo 'Benchmarks...' && echo -en 'travis_fold:start:script.benchmarks\\r'
171+ - if [[ "$TESTS" == "test_c" ]]; then
172+ cd benchmarks && ./build.pl && ./run.pl && cd ..;
173+ fi
174+ - echo -en 'travis_fold:end:script.benchmarks\\r'
175+###
176+# EOF
CHANGELOGdeleted−578
@@ -1,578 +0,0 @@
1−New in 0.9.19:
2−--------------
3−* The Idris Reference manual has been fleshed out with content originally found
4− on the GitHub wiki.
5−* The Show class has been moved into Prelude.Show and augmented with the method
6− showPrec, which allows correct parenthesization of showed terms. This comes
7− with the type Prec of precedences and a few helper functions.
8−* New REPL command :printerdepth that sets the pretty-printer to only descend to
9− some particular depth when printing. The default is set to a high number to
10− make it less dangerous to experiment with infinite structures. Infinite depth
11− can be set by calling :printerdepth with no argument.
12−* Compiler output shows applications of >>= in do-notation
13−* fromInteger i where i is an integer constant is now shown just as i in
14− compiler output
15−* An interactive shell, similar to the prover, for running reflected elaborator
16− actions. Access it with :elab from the REPL.
17−* New command-line option --highlight that causes Idris to save highlighting
18− information when successfully type checking. The information is in the same
19− format sent by the IDE mode, and is saved in a file with the extension ".idh".
20−* Use predicates instead of boolean equality proofs as preconditions
21− on List functions
22−* More flexible 'case' construct, allowing each branch to target different
23− types, provided that the case analysis does not affect the form of any
24− variable used in the right hand side of the case.
25−
26−New in 0.9.18:
27−--------------
28−* GHC 7.10 compatibility
29−* Add support for bundled toolchains.
30−* Strings are now UTF8 encoded in the default back end
31−* Idris source files are now assumed to be in UTF8, regardless of locale
32− settings.
33−* Some reorganisation of primitives:
34− + Buffer and BitVector primitives have been removed (they were not
35− tested sufficiently, and lack a maintainer)
36− + Float has been renamed 'Double' (Float is defined in the Prelude for
37− compatibility)
38− + Externally defined primitives and operations now supported with
39− '%extern' directive, allowing back ends to define their own special
40− purpose primitives
41− + Ptr and ManagedPtr have been removed and replaced with external primitives
42−* Add %hint function annotation, which allows functions to be used as
43− hints in proof search for 'auto' arguments. Only functions which return
44− an instance of a data or record type are allowed as hints.
45−* Syntax rules no longer perform variable capture. Users of effects will
46− need to explicitly name results in dependent effect signatures instead
47− of using the default name "result".
48−* Pattern-matching lambdas are allowed to be impossible. For example,
49− Dec (2 = 3) can now be constructed with No $ \(Refl) impossible, instead of
50− requiring a separate lemma.
51−* Case alternatives are allowed to be impossible:
52− case Vect.Nil {a=Nat} of { (x::xs) impossible ; [] => True }
53−* The default Semigroup and Monoid instances for Maybe are now prioritised
54− choice, keeping the first success as Alternative does. The version that
55− collects successes is now a named instance.
56−* :exec REPL command now takes an optional expression to compile and run/show
57−* The return types of `Vect.findIndex`, `Vect.elemIndex` and
58− `Vect.elemIndexBy` were changed from `Maybe Nat` to `Maybe (Fin n)`
59−* A new :browse command shows the contents of a namespace
60−* `{n} is syntax for a quotation of the reflected representation of the name
61− "n". If "n" is lexically bound, then the resulting quotation will be for it,
62− whereas if it is not, then it will succeed with a quotation of the unique
63− global name that matches.
64−* New syntax for records that closely matches our other record-like structures:
65− type classes. See the updated tutorial for details.
66−* Records can be coinductive. Define coinductive records with the "corecord"
67− keyword.
68−* Type class constructors can be assigned user-accessible names. This is done
69− using the same syntax as record constructors.
70−* if ... then ... else ... is now built-in syntax instead of being defined in
71− a library. It is shown in REPL output and error messages, rather than its
72− desugaring.
73−* The desugaring of if ... then ... else ... has been renamed to ifThenElse from
74− boolElim. This is for consistency with GHC Haskell and scala-virtualized, and
75− to reflect that if-notation makes sense with non-Bool datatypes.
76−* Agda-style semantic highlighting is supported over the IDE protocol.
77−* Experimental support for elaborator reflection. Users can now script the
78− elaborator, for use in code generation and proof automation. This feature is
79− still under rapid development and is subject to change without notice. See
80− Language.Reflection.Elab and the %runElab constructs
81−
82−
83−New in 0.9.17:
84−--------------
85−* The --ideslave command line option has been replaced with a --ide-mode
86− command line option with the same semantics.
87−* A new tactic "claim N TY" that introduces a new hole named N with type TY
88−* A new tactic "unfocus" that moves the current hole to the bottom of the
89− hole stack
90−* Quasiquotation supports the generation of Language.Reflection.Raw terms
91− in addition to Language.Reflection.TT. Types are used for disambiguation,
92− defaulting to TT at the REPL.
93−* Language.Reflection.Quotable now takes an extra type parameter which
94− determines the type to be quoted to. Instances are provided to quote
95− common types to both TT and Raw.
96−* Library operators have been renamed for consistency with Haskell. In
97− particular, Applicative.(<$>) is now Applicative.(<*>) and (<$>) is
98− now an alias for Functor.map. Correspondingly, ($>) and (<$) have
99− been renamed to (<*) and (*>). The cascading effects of this rename
100− are that Algebra.(<*>) has been renamed to Algebra.(<.>) and
101− Matrix.(<.>) is now Matrix.(<:>).
102−* Binding forms in DSL notation are now given an extra argument: a
103− reflected representation of the name that the user chose.
104− Specifically, the rewritten lambda, pi, and let binders will now get
105− an extra argument of type TTName. This allows more understandable
106− dynamic errors in DSL code and more readable code generation results.
107−* DSL notation can now be applied with $
108−* Added FFI_Export type which allows Idris functions to be exportoed and
109− called from foreign code
110−* Instances can now have documentation strings.
111−* Type providers can have documentation strings.
112−* Unification errors now (where possible) contain information about provenance
113− of a type
114−* New REPL command ":core TM" that shows the elaborated form of TM along with
115− its elaborated type using the syntax of TT. IDE mode has a corresponding
116− command :elaborate-term for serialized terms.
117−* Effectful and IO function names for sending data to STDOUT have been
118− aligned, semantically.
119− + `print` is now for putting showable things to STDOUT.
120− + `printLn` is for putting showable things to STDOUT with a new line
121− + `putCharLn` for putting a single character to STDOUT, with a new line.
122−* Classes can now be annotated with 'determining parameters' to say which
123− must be available before resolving instances. Only determining parameters
124− are checked when checking for overlapping instances.
125−* New package 'contrib' containing things that are less mature or less used
126− than the contents of 'base'. 'contrib' is not available by default, so you
127− may need to add '-p contrib' to your .ipkg file or Idris command line.
128−* Arguments to class instances are now checked for injectivity.
129− Unification assumes this, so we need to check when instances are defined.
130−
131−New in 0.9.16:
132−--------------
133−* Inductive-inductive definitions are now supported (i.e. simultaneously
134− defined types where one is indexed by the other.)
135−* Implicits and type class constraints can now appear in scopes other than
136− the top level.
137−* Importing a module no longer means it is automatically reexported. A new
138− "public" modifier has been added to import statements, which will reexport
139− the names exported from that module.
140−* Implemented @-patterns. A pattern of the form x@p on the left hand side
141− matches p, with x in scope on the right hand side with value p.
142−* A new tactic sourceLocation that fills the current hole with the current
143− source code span, if this information is available. If not, it raises an
144− error.
145−* Better Unicode support for the JavaScript/Node codegen
146−* ':search' and ':apropos' commands can now be given optional package lists
147− to search.
148−* Vect, Fin and So moved out of prelude into base, in modules Data.Vect,
149− Data.Fin and Data.So respectively.
150−* Several long-standing issues resolved, particularly with pattern matching
151− and coverage checking.
152−* Modules can now have API documentation strings.
153−
154−New in 0.9.15:
155−--------------
156−* Two new tactics: skip and fail. Skip does nothing, and fail takes a string
157− as an argument and produces it as an error.
158−* Corresponding reflected tactics Skip and Fail. Reflected Fail takes a list
159− of ErrorReportParts as an argument, like error handlers produce, allowing
160− access to the pretty-printer.
161−* Stop showing irrelevant and inaccessible internal names in the interactive
162− prover.
163−* The proof arguments in the List library functions are now implicit and
164− solved automatically.
165−* More efficient representation of proof state, leading to faster elaboration
166− of large expressions.
167−* EXPERIMENTAL Implementation of uniqueness types
168−* Unary negation now desugars to "negate", which is a method of the Neg type class.
169− This allows instances of Num that can't be negative, like Nat, and it makes correct
170− IEEE Float operations easier to encode. Additionally, unary negation is now available
171− to DSL authors.
172−* The Java and LLVM backends have been factored out for separate maintenance. Now, the
173− compiler distribution only ships with the C and JavaScript backends.
174−* New REPL command :printdef displays the internal definition of a name
175−* New REPL command :pprint pretty-prints a definition or term with LaTeX or
176− HTML highlighting
177−* Naming of data and type constructors is made consistent across the standard
178− library (see #1516)
179−* Terms in `code blocks` inside of documentation strings are now parsed and
180− type checked. If this succeeds, they are rendered in full color in
181− documentation lookups, and with semantic highlighting for IDEs.
182−* Fenced code blocks in docs defined with the "example" attribute are rendered
183− as code examples.
184−* Fenced code blocks declared to be Idris code that fail to parse or type check now
185− provide error messages to IDE clients.
186−* EXPERIMENTAL support for partial evaluation (Scrapping your Inefficient
187− Engine style)
188−
189−New in 0.9.14:
190−--------------
191−* Tactic for case analysis in proofs
192−* Induction and case tactic now work on expressions
193−* Support for running tests for a package with the tests section of .ipkg files and the
194− --testpkg command-line option
195−* Clearly distinguish between type providers and postulate providers at the use site
196−* Allow dependent function syntax to be overridden in dsl blocks, similarly to
197− functions and let. The keyword for this is "pi".
198−* Updated 'effects' library, with simplified API
199−* All new JavaScript backend (avoids callstack overflows)
200−* Add support for %lib directive for NodeJS
201−* Quasiquotes and quasiquote patterns allow easier work with reflected terms.
202− `(EXPR) quasiquotes EXPR, causing the elaborator to be used to produce a reflected
203− version of it. Subterms prefixed with ~ are unquoted - on the RHS, they are reflected
204− terms to splice in, while on the LHS they are patterns.
205− A quasiquote expression can be given a goal type for the elaborator, which helps with
206− disambiguation. For instance, `(() : ()) quotes the unit constructor, while `(() : Type)
207− quotes the unit type.
208− Both goal types and quasiquote are typechecked in the global environment.
209−* Better inference of unbound implicits
210−
211−New in 0.9.13:
212−--------------
213−* IDE support for retrieving structured information about metavariables
214−* Experimental Bits support for JavaScript
215−* IdrisDoc: a Haddock- and JavaDoc-like HTML documentation generator
216−* Command line option -e (or --eval) to evaluate expressions without loading the
217− REPL. This is useful for writing more portable tests.
218−* Many more of the basic functions and datatypes are documented.
219−* Primitive types such as Int and String are documented
220−* Removed javascript lib in favor of idris-hackers/iQuery
221−* Specify codegen for :compile REPL command (e.g. :compile javascript program.js)
222−* Remove :info REPL command, subsume and enhance its functionality in the :doc command
223−* New (first class) nested record update/access syntax:
224− record { a->b->c = val } x -- sets field accessed by c (b (a x)) to val
225− record { a->b->c } x -- accesses field, equivalent to c (b (a x))
226−* The banner at startup can be suppressed by adding :set nobanner to the initialisation script.
227−* :apropos now accepts space-delimited lists of query items, and searches for the conjunction
228− of its inputs. It also accepts binder syntax as search strings - for instance, -> finds
229− functions.
230−* Totality errors are now treated as warnings until code generation time, when they become
231− errors again. This allows users to use the interactive editing features to fix totality
232− issues, but no programs that violate the stated assumptions will actually run.
233−* Added :makelemma command, which adds a new top level definition to solve
234− a metavariable.
235−* Extend :addclause to add instance bodies as well as definitions
236−* Reverse parameters to BoundedList -- now matches Vect, and is easier to instantiate classes.
237−* Move foldl into Foldable so it can be overridden.
238−* Experimental :search REPL command for finding functions by type
239−
240−Internal changes
241−
242−* New implementation of erasure
243−
244−New in 0.9.12:
245−--------------
246−
247−* Proof search now works for metavariables in types, giving some interactive
248− type inference.
249−* New 'Lazy' type, replacing laziness annotations.
250−* JavaScript and Node codegen now understand the %include directive.
251−* Concept of 'null' is now understood in the JavaScript and Node codegen.
252−* Lots of performance patches for generated JavaScript.
253−* New commands :eval (:e) and :type (:t) in the prover, which either normalise
254− or show the type of expressions.
255−* Allow type providers to return postulates in addition to terms.
256−* Syntax for dealing with match failure in <- and pattern matching let.
257−* New syntax for inline documentation. Documentation starts with |||, and
258− arguments are documented by preceding their name with @. Example:
259− ||| Add two natural numbers
260− ||| @ n the first number (examined by the function)
261− ||| @ m the second number (not examined)
262− plus (n, m : Nat) -> Nat
263−* Allow the auto-solve behaviour in the prover to be disabled, for easier
264− debugging of proof automation. Use ":set autosolve" and ":unset autosolve".
265−* Updated 'effects' library
266−* New :apropos command at REPL to search documentation, names, and types
267−* Unification errors are now slightly more informative
268−* Support mixed induction/coinduction with 'Inf' type
269−* Add 'covering' function option, which checks whether a function and all
270− descendants cover all possible inputs
271−
272−New in 0.9.11:
273−--------------
274−
275−* Agda-style equational reasoning (in Syntax.PreorderReasoning)
276−* 'case' construct now abstracts over the scrutinee in its type
277−* Added label type 'name (equivalent to the empty type).
278− This is intended for field/effect disambiguation. "name" can be any
279− valid identifier. Two labels are definitionally equal if they have the
280− same name.
281−* General improvements in error messages, especially %error_reverse
282− annotation, which allows a hint as to how to display a term in error
283− messages
284−* --ideslave mode now transmits semantic information about many of the
285− strings that it emits, which can be used by clients to implement
286− semantic highlighting like that of the REPL. This has been implemented
287− in the Emacs mode and the IRC bot, which can serve as examples.
288−* New expression form: with NAME EXPR privileges the namespace NAME
289− when disambiguating overloaded names. For example, it is possible to
290− write "with Vect [1,2,3]" at the REPL instead of "the (Vect _ _) [1,2,3]",
291− because the Vect constructors are defined in a namespace called Vect.
292−* assert_smaller internal function, which marks an expression as smaller than
293− a pattern for use in totality checking.
294− e.g. "assert_smaller (x :: xs) (f xs)" asserts that "f xs" will always be
295− structurally smaller than "(x :: xs)"
296−* assert_total internal function, which marks a subexpression as assumed to
297− be total, e.g "assert_total (tail (x :: xs))".
298−* Terminal width is automatically detected if Idris is compiled with curses
299− support. If curses is not available, automatic mode assumes 80 columns.
300−* Changed argument order for Prelude.Either.either.
301−* Experimental 'neweffects' library, intended to replace 'effects' in the
302− next release.
303−
304−Internal changes
305−
306−* Faster elaboration
307−* Smaller .ibc files
308−* Pretty-printer now used for all term output
309−
310−
311−New in 0.9.10:
312−--------------
313−
314−* Type classes now implemented as dependent records, meaning that method
315− types may now depend on earlier methods.
316−* More flexible class instance resolution, so that function types and lambda
317− expressions can be made instances of a type class.
318−* Add !expr notation for implicit binding of intermediate results in
319− monadic/do/etc expressions.
320−* Extend Effects package to cope with possibly failing operations, using
321− "if_valid", "if_error", etc.
322−* At the REPL, "it" now refers to the previous expression.
323−* Semantic colouring at the REPL. Turn this off with --nocolour.
324−* Some prettifying of error messages.
325−* The contents of ~/.idris/repl/init are run at REPL start-up.
326−* The REPL stores a command history in ~/.idris/repl/history.
327−* The [a..b], [a,b..c], [a..], and [a,b..] syntax now pass the totality
328− checker and can thus be used in types. The [x..] syntax now returns an
329− actually infinite stream.
330−* Add '%reflection' option for functions, for compile-time operations on
331− syntax.
332−* Add expression form 'quoteGoal x by p in e' which applies p to the expected
333− expression type and binds the result to x in the scope e.
334−* Performance improvements in Strings library.
335−* Library reorganisation, separated into prelude/ and base/.
336−
337−Internal changes
338−
339−* New module/dependency tree checking.
340−* New parser implementation with more precise errors.
341−* Improved type class resolution.
342−* Compiling Nat via GMP integers.
343−* Performance improvements in elaboration.
344−* Improvements in termination checking.
345−* Various REPL commands to support interactive editing, and a client/server
346− mode to allow external invocation of REPL commands.
347−
348−New in 0.9.9:
349−-------------
350−
351−* Apply functions by return type, rather than with arguments:
352− "t <== f" means "apply f with arguments such that it returns a value
353− of type t"
354−* Allow the result type of a rewrite to be specified
355−* Allow names to be attached to provisional definitions
356− lhs ?= {name} rhs -- generates a lemma called 'name' which makes the
357− types of the lhs and rhs match. {name} is optional - a unique name is
358− generated if it is absent.
359−* Experimental LLVM backend
360−* Added Data.HVect module
361−* Fix fromInteger to take an Integer, rather than an Int
362−* Integer literals for Fin
363−* Renamed O to Z, and fO to fZ
364−* Swapped Vect arguments, now Vect : Nat -> Type -> Type
365−* Added DecEq instances
366−* Add 'equiv' tactic, which rewrites a goal to an equivalent (convertible) goal
367−
368−Internal changes
369−
370−* Add annotation for unification traces
371−* Add 'mrefine' tactic for refining by matching against a type
372−* Type class resolution fixes
373−* Much faster coverage checking
374−
375−New in 0.9.8:
376−-------------
377−
378−User visible changes:
379−
380−* Added "rewrite ... in ..." construct
381−* Allow type class constraints in 'using' clauses
382−* Renamed EFF to EFFECT in Effect package
383−* Experimental Java backend
384−* Tab completion in REPL
385−* Dynamic loading of C libraries in the interpreter
386−* Testing IO actions at the REPL with :x command
387−* Improve rendering of :t
388−* Fixed some INTERNAL ERROR messages
389−
390−Internal changes:
391−
392−* Fix non-linear pattern checking
393−* Improved name disambiguation
394−* More flexible unification and elaboration of lambdas
395−* Various unification and totality checking bug fixes
396−
397−New in 0.9.7:
398−-------------
399−
400−User visible changes:
401−
402−* 'implicit' keyword, for implicit type conversion
403−* Added Effects package
404−* Primitives for 8,16,32 and 64 bit integers
405−
406−Internal changes:
407−
408−* Change unification so that it keeps track of failed constraints in case
409− later information helps to resolve them
410−* Distinguishing parameters and indices in data types
411−* Faster termination/coverage checking
412−* Split 'javascript' target into 'javascript' and 'node'
413−
414−New in 0.9.6:
415−-------------
416−
417−User visible changes:
418−
419−* The type of types is now 'Type' rather than 'Set'
420−* Forward declarations of data allowed
421− - supporting induction recursion and mutually recursive data
422−* Type inference of definitions in 'where' clauses
423− - Provided that the type can be completely determined from the first
424− application of the function (in the top level definition)
425−* 'mutual' blocks added
426− - effect is to elaborate all types of declarations in the block before
427− elaborating their definitions
428− - allows inductive-recursive definitions
429−* Expression inspected by 'with' clause now abstracted from the goal
430− - i.e. "magic" with
431−* Implicit arguments will be added automatically only if their initial
432− letter is lower case, or they are in a using declaration
433−* Added documentation comments (Haddock style) and ':doc' REPL command
434−* Pattern matching on strings, big integers and characters
435−* Added System.Concurrency modules
436−* Added 'postulate' declarations
437−* Allow type annotations on 'let' tactic
438−* EXPERIMENTAL JavaScript generation, with '--target javascript' option
439−
440−Internal changes:
441−
442−* Separate inlining methods at compile-time and run-time
443−* Fixed nested parameters blocks
444−* Improve efficiency of elaborator by:
445− - only normalising when necessary
446− - reducing backtracking with resolving ambiguities
447−* Better compilation of case trees
448−
449−New in 0.9.5:
450−-------------
451−
452−User visible changes:
453−
454−* Added codata
455− - as data declarations, but constructor arguments are evaluated lazily
456− - functions which return a codata type do not reduce at compile time
457−* Added 'parameters' blocks
458−* Allow local data definitions in where blocks
459−* Added '%default' directive to declare total-by-default or partial-by-default
460− for functions, and a corresponding "partial" reserved words to mark functions
461− as allowed to be partial. Also "--total" and "--partial" added as command
462− line options.
463−* Command line option "--warnpartial" for flagging all undeclared
464− partial functions, without error.
465−* New termination checker supporting mutually recursive definitions.
466−* Added ':load' command to REPL, for loading a new file
467−* Added ':module' command to REPL, for adding modules
468−* Renamed library modules (now have initial capital)
469−
470−Internal changes:
471−
472−* Several improvements and fixes to unification
473−* Added collapsing optimisation and more aggressive erasure
474−
475−New in 0.9.4:
476−-------------
477−
478−User visible changes:
479−
480−* Simple packaging system
481−* Added --dumpc flag for displaying generated code
482−
483−Internal changes:
484−
485−* Improve overloading resolution (especially where this is a type error)
486−* Various important bug fixes with evaluation and compilation
487−* More aggressive compile-time evaluation
488−
489−New in 0.9.3:
490−-------------
491−
492−User visible changes:
493−
494−* Added binding forms to syntax rules
495−* Named class instances
496−* Added ':set' command, with options 'errorcontext' for displaying local
497− variables in scope when a unification error occurs, and 'showimplicits'
498− for displaying elaborated terms in full
499−* Added '--errorcontext' command line switch
500−* Added ':proofs' and ':rmproofs' commands
501−* Various minor REPL improvements and fixes
502−
503−Internal changes:
504−
505−* Completely new run time system (not based on Epic or relying on Boehm GC)
506−* Normalise before forcing to catch more forceable arguments
507−* Types no longer exported in normal form
508−* Try to resolve overloading by inspecting types, rather than full type
509− checking
510−
511−New in 0.9.2:
512−-------------
513−
514−User visible changes:
515−
516−* backtick notation added: x `foo` y ==> foo x y
517−* case expressions allowed in type signatures
518−* Library extensions in prelude.vect and prelude.algebra
519−* malloc/trace_malloc added to builtins.idr
520−
521−Internal changes:
522−
523−* Some type class resolution fixes
524−* Several minor bug fixes
525−* Performance improvements in resolving overloading and type classes
526−
527−New in 0.9.1:
528−-------------
529−
530−User visible changes:
531−
532−* DSL notation, for overloading lambda and let bindings
533−* Dependent records, with projection and update
534−* Totality checking and 'total' keyword
535−* Auto implicits and default argument values {auto n : T}, {default val n : T}
536−* Overlapping type class instances disallowed
537−* Many extensions to prelude.nat and prelude.list libraries (mostly thanks to
538− Dominic Mulligan)
539−* New libraries: control.monad.identity, control.monad.state
540−* Small improvements in error reporting
541−
542−Internal changes:
543−
544−* Faster compilation (only compiling names which are used)
545−* Better type class resolution
546−* Lots of minor bug fixes
547−
548−0.1.x to 0.9.0:
549−
550−Complete rewrite. User visible changes:
551−
552−* New proof/tactics syntax
553−* New syntax for pairs/dependent pairs
554−* Indentation-significant syntax
555−* Added type classes
556−* Added where clauses
557−* Added case expressions, pattern matching let and lambda
558−* Added monad comprehensions
559−* Added cumulativity and universe checking
560−* Ad-hoc name overloading
561− - Resolved by type or explicit namespace
562−* Modules (Haskell-style)
563−* public, abstract and private access to functions and types
564−* Separate type-checking
565−* Improved interactive environment
566−* Replaced 'do using' with Monad class
567−* Extended syntax macros
568−
569−Internal changes:
570−
571−* Everything :-)
572−* All definitions (functions, classes and instances) are elaborated to top
573− level, fully explicit, data declarations and pattern matching definitions,
574− which are verified by a minimal type checker.
575−
576−This is the first release of a complete reimplementation. There will be bugs.
577−If you find any, please do not hesitate to contact Edwin Brady
578−(ecb10@st-andrews.ac.uk).
CHANGELOG.mdnew file+1290
@@ -0,0 +1,1290 @@
1+# New since last release
2++ Updated to work with GHC 8.8 and cabal 3.0
3+
4+# New in 1.3.2
5++ Documentation added to proof section
6+
7+## Library updates
8++ `openFile` opens the file in binary mode on Windows.
9++ Added library functions `clockTime` and `fRemove`
10+
11+## Tool updates
12++ Modules no longer require building if imports have changed but all
13+ interfaces (i.e. types for names declared `export` and definitions of names
14+ declared `public export`) are unchanged.
15++ The result of calling `:doc` now details the accessbility of items as well as their totality.
16+
17+## Miscellaneous updates
18++ Compiler flag `--optimise-nat-like-types` enables compilation
19+ of `Nat`-like type families to big integers. A type family
20+ is `Nat`-like if, after erasure, it has two constructors,
21+ one nullary, the other one with exactly one recursive field.
22+
23+# New in 1.3.1
24+
25+## Tool updates
26++ Fixes for building with GHC 8.6
27++ Fix for megaparsec update
28++ Some fixes for memory allocation issues in the C back end
29+
30+# New in 1.3.0
31+
32+## Language updates
33++ Old 'induction' tactics and eliminator generation functionality ('%elim', '%case', 'elim_for') is no longer supported.
34+ Please, rely on the ones provided by Pruviloj and elaborator reflection instead.
35+
36+## Library updates
37+
38++ Changed rndInt in Effect.Random so that it does not alternate between odd
39+ and even.
40++ Additions to `contrib`:
41+ * `Data.SortedBag`: Bag (or Multiset) implemention based on `Data.SortedMap`.
42+ * `Data.PosNat`: A `Nat` paired with a proof that it is positive.
43+ * `Data.Chain`: A function with an arbitrary number of arguments, plus
44+ combinators for working with them.
45+
46+## Tool updates
47++ Added a switch `--allow-capitalized-pattern-variables` to optionally allow capitalized pattern variables after they were prohibited in 1.2.0.
48++ REPL now prints an error message if program compiled by `:exec` terminates
49+ abnormally.
50++ Idris now builds with GHC 8.4.
51++ In the C backend, the representation of Idris values at runtime has been reworked.
52+
53+# New in 1.2.0
54+
55+## Language updates
56+
57++ In `@`-patterns such as `x@p`, `x` is now in scope on the right-hand side
58+ of any definitions in `where` clauses, provided the left-hand side of the
59+ definition does not shadow it.
60++ The `LinearTypes` language extension has been revised. It implements the
61+ rules from Bob Atkey's draft "The Syntax and Semantics of Quantitative
62+ Type Theory" and now works with holes and case expressions.
63++ Backticked operators can appear in sections, e.g. ``(`LTE` 42)`` or
64+ ``(1 `plus`)``.
65++ Backticked operators can have their precendence and associativity set like
66+ other operators, e.g. ``infixr 8 `cons` ``. Backticked operators with
67+ undeclared fixity are treated as non-associative with precedence lower
68+ than all declared operators.
69++ Allow non-injective implementations if explicitly named, e.g.,
70+ ```idris
71+ LTB : Nat -> Type
72+ LTB b = DPair Nat (\ n => LT n b)
73+
74+ implementation [uninhabltb] Uninhabited (LTB Z) where
75+ uninhabited (MkDPair n prf) = absurd prf
76+ ```
77+ It is possible to use `using implementation uninhabltb` to add the
78+ implementation to the automated resolution, but if it fails to find the
79+ instance due to non-injectivity, one must pass it explicitly to target
80+ function, i.e. `absurd @{uninhabltb}`.
81++ Verbatim strings now support trailing quote characters. All quote characters
82+ until the final three are considered part of the string. Now a string such as
83+ `""""hello""""` will parse, and is equivalent to `"\"hello\""`.
84++ C FFI now supports pasting in any expression by prefixing it with '#', e.g.
85+ ```idris
86+ intMax : IO Int
87+ intMax = foreign FFI_C "#INT_MAX" (IO Int)
88+ ```
89++ The deprecated keywords `%assert_total`, `abstract`, and `[static]` have
90+ been removed as well as the use of "public" instead of "public export" to
91+ expose a symbol.
92++ The syntax for pattern-match alternatives now works for `let` statements in
93+ `do` blocks in addition to `let` expressions and `<-` statements, e.g.
94+ ```idris
95+ do …
96+ let Just x = expr | Nothing => empty
97+ …
98+ ```
99+ This means that a `with`-application (using `|`) cannot be used in that
100+ position anymore.
101+
102+## Library Updates
103+
104++ Removed `oldeffects` library from `libs` folder, use `effects` or `Control.ST` instead.
105++ Added `Text.Literate`, a module for working with literate source files.
106++ Added `Data.IORef`, for working with mutable references in `IO` and `JS_IO`.
107++ Added `discriminate` and `construct` tactics to Pruviloj.
108++ Added `IsSucc` type to `Prelude`, which proves that a `Nat` is a successor.
109++ Added `Data.IOArray`, containing primitives for mutable arrays.
110++ Added `Language.JSON`, for total serialization/deserialization of JSON data.
111++ Reworked operator fixity for many operators.
112+ * Changed `&&` and `||` to be right-associative. Increased precedence of `&&`
113+ to be higher than that of `||`.
114+ * Removed associativity from Boolean comparison operators `==`, `/=`, `<`, `<=`,
115+ `>`, and `>=`. Increased precedence of `/=` and `==` to match the others.
116+ * Made `<|>`, `<$>`, and `.` right-associative.
117+ * Swapped precedence of `<|>` and `<*>` (and its related operators, `<*` and
118+ `*>`). Now `<|>` has a lower precedence.
119+ * Lowered the precedence of `>>=` to be below that of `<|>`.
120++ Added some useful string manipulation functions to `Data.String.Extra`.
121++ Added `Control.Delayed`, a module for conditionally making a type `Inf` or `Lazy`.
122++ Added `Data.Fuel`, which implements the `Fuel` data type and the partial `forever` function.
123++ Added `Data.Bool.Extra`, a module with properties of boolean operations.
124++ Moved core of `Text.Lexer` to `Text.Lexer.Core`. Added several new combinators
125+ and lexers to `Text.Lexer`.
126++ Moved core of `Text.Parser` to `Text.Parser.Core`. Added several new combinators
127+ to `Text.Parser`. Made the following changes.
128+ * Flipped argument order of `parse`.
129+ * Renamed `optional` to `option` and flip argument order.
130+ * Renamed `maybe` to `optional`.
131+ * Generalised many combinators to use an unknown `commit` flag where possible.
132++ `Prelude.Doubles.atan2` is now implemented as a primitive instead of
133+ being coded in Idris.
134++ Added `Test.Unit` to `contrib` for simple unit testing.
135++ Removed several deprecated items from the libraries shipped with Idris.
136++ Moved `abs` from the `Neg` interface into its own `Abs` interface. `Nat`
137+ implements `Abs` with `abs = id`.
138++ Added `Control.ST.File`, an ST based implementation of the same behaviour
139+ implemented by `Effect.File` in the effects package.
140+
141+## Tool Updates
142+
143++ Private functions are no longer visible in the REPL except for modules
144+ that are explicitly loaded.
145++ The --interface option now creates CommonJS modules on the node backend.
146++ The C backend now pass arguments to the C compiler in the same order
147+ as they were given in the source files.
148++ Backslash, braces and percent symbols are now correctly pretty printed
149+ in LaTeX.
150++ Errors and warnings now consistently have the following format:
151+ ```idris
152+ reg068.idr:1:6-8:
153+ |
154+ 1 | data nat : Type where --error
155+ | ~~~
156+ Main.nat has a name which may be implicitly bound.
157+ This is likely to lead to problems!
158+ ```
159+ The code is highlighted when highlighting information is available. How
160+ much highlighting information is available depends on where the error
161+ occurred.
162++ The parser provider has been switched from Trifecta to Megaparsec. This
163+ could possibly cause some subtle deviations in parsing from previous
164+ versions of Idris.
165++ Many more errors now report beginning *and* ending position (which may be
166+ on different lines), instead of just a single point. The format is
167+ `Foo.idr:9:7-15:` if ending column is on the same line or
168+ `Foo.idr:9:7-10:15:` if the ending column is on a different line.
169++ Error messages were changed so that the last column is inclusive, e.g.
170+ `Foo.idr:9:7-15:` includes column 15. Previously the error would have read
171+ `Foo.idr:9:7-16:`.
172+
173+## Packaging Updates
174+
175++ Package names now only accept a restrictive charset of letters, numbers and the `-_` characters.
176+ Package names are also case insensitive.
177++ When building makefiles for the FFI, the environment variables
178+ `IDRIS_INCLUDES` and `IDRIS_LDFLAGS` are now set with the correct C
179+ flags.
180+
181+# New in 1.1.1
182+
183++ Erasure analysis is now faster thanks to a bit smarter constraint solving.
184++ Fixed installation issue
185++ Fixed a potential segfault when concatenating strings
186+
187+# New in 1.1.0
188+
189+## Library Updates
190+
191++ Added `Text.PrettyPrint.WL` an implementation of the Wadler-Leijen
192+ Pretty-Print algorithm. Useful for those wishing to pretty print
193+ things.
194++ Added `Text.Lexer` and `Text.Parser` to `contrib`. These are small libraries
195+ for implementing total lexical analysers and parsers.
196++ New instances:
197+ + Added `Catchable` for `ReaderT`, `WriterT`, and `RWST`.
198+ + Added `MonadTrans` for `RWST`.
199++ Added utility functions to `Data.SortedMap` and `Data.SortedSet` (`contrib`),
200+ most notably `merge`, merging two maps by their `Semigroup` op (`<+>`)
201++ `Prelude.WellFounded` now contains an interface `Sized a` that defines a size
202+ mapping from `a` to `Nat`. For example, there is an implementation for lists,
203+ where `size = length`.
204+
205+ The function `sizeAccessible` then proves well-foundedness of the relation
206+ `Smaller x y = LT (size x) (size y)`, which allows us to use strong
207+ induction conveniently with any type that implements `Sized`.
208+
209+ In practice, this allows us to write functions that recurse not only on
210+ direct subterms of their arguments but on any value
211+ with a (strictly) smaller `size`.
212+
213+ A good example of this idiom at work is `Data.List.Views.splitRec` from `base`.
214++ Added utility lemma `decEqSelfIsYes : decEq x x = Yes Refl` to
215+ `Decidable.Equality`. This is primarily useful for proving properties of
216+ functions defined with the help of `decEq`.
217+
218+## Tool Updates
219+
220++ New JavaScript code generator that uses an higher level intermediate
221+ representation.
222+
223++ Various optimizations of the new JavaScript code generator.
224+
225++ Names are now annotated with their representations over the IDE
226+ protocol, which allows IDEs to provide commands that work on special
227+ names that don't have syntax, such as case block names.
228+
229+
230+# New in 1.0
231+
232++ It's about time
233+
234+# New in 0.99.2
235+
236+## Library Updates
237+
238++ Added `Data.Buffer` to `base`. This allows basic manipulation of mutable
239+ buffers of `Bits8`, including reading from and writing to files.
240+
241+## Tool Updates
242+
243++ Idris now checks the list of packages specified at the command line
244+ against those installed. If there is a mismatch Idris will complain.
245+
246+## Miscellaneous Updates
247+
248++ Documentation updates for the new `Control.ST` library
249++ Various stability/efficiency fixes
250+
251+# New in 0.99.1:
252+
253+## Language updates
254+
255+* Language pragmas now required for the less stable existing features, in
256+ addition to the existing `TypeProviders` and `ErrorReflection`:
257+ + `ElabReflection`, which must be enabled to use `%runElab`
258+ + `UniquenessTypes`, which must be enabled to use `UniqueType`
259+ + `DSLNotation`, which must be enabled to define a `dsl` block
260+ + `FirstClassReflection`, which must be enabled to define a `%reflection`
261+ function
262+
263+* New language extension `LinearTypes`:
264+ + This allows adding a /multiplicity/ to a binder which says how often it
265+ is allowed to be used; either 0 or 1 (if unstated, multiplicity is "many")
266+ + The typing rules follow Conor McBride's paper "I Got Plenty o' Nuttin'"
267+ + This is highly experimental, unfinished, not at all polished. and there
268+ are still lots of details to sort out. Some features don't quite work
269+ properly yet. But it is there to play with for the brave!
270+
271+## Tool Updates
272+
273++ Idris' output has been updated to more accurately reflect its
274+ progress through the compiler i.e. Type Checking; Totality Checking;
275+ IBC Generation; Compiling; and Code Generation. To control the
276+ loudness of the reporting three verbosity levels are introduced:
277+ `--V0`, `--V1`, and `--V2`. The old aliases of `-V` and `--verbose`
278+ persist.
279+
280++ New REPL command `:!` that runs an external shell command.
281+
282++ The REPL now colourises output on MinTTY consoles (e.g., Cygwin and MSYS)
283+ on Windows, which previously did not occur due to a bug.
284+
285++ Idris now runs in a UTF-8-compatible codepage on Windows. This fixes many
286+ Unicode-rendering issues on Windows (e.g., error messages stating
287+ `commitBuffer: invalid argument (invalid character)`).
288+
289++ Idris now has a `--warnipkg` flag to enable auditing of Idris
290+ packages during build time. Currently auditing check's the list of
291+ modules specified in the `iPKG` file with those presented in the
292+ package directory.
293+
294+## Library Updates
295+
296++ Terminating programs has been improved with more appropriate
297+ functions (`exitWith`, `exitFailure`, and `exitSuccess`) and a data
298+ structure (`ExitCode`) to capture a program's return code.
299++ Casting a `String` to an `Int`, `Integer` or a `Double` now ignores leading
300+ and trailing whitespace. Previously only leading whitespace was ignored.
301++ RTS functions `openFile`, `do_popen`, and `ARGV` are now properly encoded using UTF-8 on Windows.
302+
303+# New in 0.99:
304+
305+## Language updates
306+
307+* `record` syntax now allows updating fields, including nested fields,
308+ by applying a function using the `$=` operator. For example:
309+
310+ ```idris
311+ record Score where
312+ constructor MkScore
313+ correct : Nat
314+ attempted : Nat
315+
316+ record GameState where
317+ constructor MkGameState
318+ score : Score
319+ difficulty : Nat
320+
321+ correct : GameState -> GameState
322+ correct st = record { score->correct $= (+1),
323+ score->attempted $= (+1) } st
324+ ```
325+
326+* Implicit parameter to interfaces are now allowed. For example:
327+
328+ ```idris
329+ interface Shows (ts : Vect k Type) where
330+ shows : HVect ts -> Vect k String
331+ ```
332+ In this interface, `k` is an implicit parameter, but previously needed to
333+ be explicit
334+
335+
336+## Library updates
337+
338+* The File Effect has been updated to take into account changes in
339+ `Prelude.File` and to provide a 'better' API.
340+* `natEnumFromThen` and `natEnumFromTo` have been updated to correctly calculate reverse ranges. Range syntax `[a,b..c]` now can be used again to generate reverse ranges.
341+* `divBN` and `modBN` now can only be used for unsigned numbers.
342+* `return`, which has been an alias for `pure` for many releases, is now deprecated.
343+* Replace instance with implementation:
344+ + `InstanceN` is deprecated, use `ImplementationN` instead.
345+ + `InstanceCtorN` is deprecated, use `ImplementationCtorN` instead.
346+ + `addInstance` is deprecated, use `addImplementation` instead.
347+ + `%instance` keyword is deprecated, use `%implementation` instead.
348+
349+* Idris packages are now installed within a sub-directory `libs` of Idris' data directory, before they were installed in the directory's root.
350+
351+## Tool updates
352+
353+* Idris' documentation system now displays the documentation for auto
354+ implicits in the output of `:doc`. This is tested for in `docs005`.
355+* New command line flag `--info` that displays information about the installation.
356+* New command line flag `--sourcepath <dir>` that allows adding directories to the source search path.
357+* Allow 'installation' of a package's IdrisDoc documentation into a central location. The default location is the subdirectory `docs` of Idris' data directory.
358+ * New flag `--installdoc <ipkg>` provided to install documentation
359+ * New flag `--docdir` provided to show default documentation installation location.
360+ * New environment variable `IDRIS_DOC_PATH` to allow specification of an alternative installation path for documentation.
361+* Semantic meaning behind several environment variables has been clarified in documentation and code. See compilation section of the reference manual for more details.
362+* Interface parameter constraints are now printed in the output of `:doc`. This
363+ is tested for in `docs006`.
364+
365+## Miscellaneous updates
366+
367+* New, faster, better, implementation of the coverage checker
368+* The test suite now uses [tasty-golden](https://hackage.haskell.org/package/tasty-golden). New tests must be registered in `test/TestData.hs`, as explained in the relevant `README.md`.
369+* Added OSX and Windows continous integration with Travis and Appveyor.
370+
371+## UI Changes
372+
373+* The :e command can now handle an $EDITOR with arguments in it, like "emacs -nw"
374+
375+
376+# New in 0.12:
377+
378+## Language updates
379+
380+* `rewrite` can now be used to rewrite equalities on functions over
381+ dependent types
382+* `rewrite` can now be given an optional rewriting lemma, with the syntax
383+ `rewrite [rule] using [rewrite_lemma] in [scope]`.
384+
385+* Reorganised elaboration of `implementation`, so that interfaces with
386+ dependencies between methods now work more smoothly
387+
388+* Allow naming of parent implementations when defining an implementation.
389+ For example:
390+
391+ ```
392+ [PlusNatSemi] Semigroup Nat where
393+ (<+>) x y = x + y
394+
395+ [MultNatSemi] Semigroup Nat where
396+ (<+>) x y = x * y
397+
398+ -- use PlusNatSemi as the parent implementation
399+ [PlusNatMonoid] Monoid Nat using PlusNatSemi where
400+ neutral = 0
401+
402+ -- use MultNatSemi as the parent implementation
403+ [MultNatMonoid] Monoid Nat using MultNatSemi where
404+ neutral = 1
405+ ```
406+
407+* Interface definitions can now include data declarations (but not data
408+ definitions). Any implementation of the interface must define the method
409+ using a data type. The effect is to cause Idris to treat the method as
410+ a data type (for unification and interface resolution purposes).
411+
412+* Experimentally, allow named implementations to be available by default in a
413+ block of declarations with `using` notation. For example:
414+
415+ ```
416+ using implementation PlusNatMonoid
417+ test : Nat -> Nat
418+ test x = x <+> x <+> neutral
419+ ```
420+
421+* Constraint arguments can now appear anywhere in function types, not just
422+ at the top level or after an implicit argument binding.
423+
424+* Experimental extended `with` syntax, which allows calling functions defined
425+ in a with block directly. For example:
426+
427+ ```
428+ data SnocList : List a -> Type where
429+ Empty : SnocList []
430+ Snoc : SnocList xs -> SnocList (xs ++ [x])
431+
432+ snocList : (xs : List a) -> SnocList a
433+
434+ my_reverse : List a -> List a
435+ my_reverse xs with (snocList xs)
436+ my_reverse [] | Empty = []
437+ my_reverse (ys ++ [x]) | (Snoc p) = x :: my_reverse ys | p
438+ ```
439+
440+ The `| p` on the right hand side means that the `with` block function will
441+ be called directly, so the recursive structure of `SnocList` can direct the
442+ recursion structure of `my_reverse`.
443+
444+* Added `%fragile` directive, which gives a warning and a message when a
445+ fragile name is referenced. For use in detailing fragile APIs.
446+
447+* The totality checker now looks under `case` blocks, rather than treating
448+ them as mutually defined functions with their top level function, meaning
449+ that it can spot more total functions.
450+
451+* The totality checker now looks under `if...then...else` blocks when checking
452+ for productivity.
453+
454+* The `%assert_total` directive is now deprecated. Instead, you can
455+ use one of the functions `assert_total`, `assert_smaller` or
456+ `assert_unreachable` to describe more precisely where a totality assertion
457+ is needed.
458+
459+## Library updates
460+
461+* `Control.WellFounded` module removed, and added to the Prelude as
462+ `Prelude.WellFounded`.
463+* Added `Data.List.Views` with views on `List` and their covering functions.
464+* Added `Data.Nat.Views` with views on `Nat` and their covering functions.
465+* Added `Data.Primitives.Views` with views on various primitive types and their covering functions.
466+* Added `System.Concurrency.Sessions` for simple management of conversations
467+ between processes
468+
469+## iPKG Updates
470+
471+* Taking cues from cabal, the `iPKG` format has been extended to
472+ include more package metadata information. The following fields
473+ have been added:
474+
475+ + `brief`: Brief description of the package.
476+ + `version`: Version string to associate with the package.
477+ + `readme`: Location of the README file.
478+ + `license`: Description of the licensing information.
479+ + `author`: Author information.
480+ + `maintainer`: Maintainer information.
481+ + `homepage`: Website associated with the package.
482+ + `sourcepage`: Location of the DVCS where the source can be found.
483+
484+
485+## Miscellaneous updates
486+
487+* The Idris man page is now installed as part of the cabal/stack build process.
488+
489+* Improved startup performance by reducing the processing of an already imported
490+ module that has changed accessibility.
491+
492+* A limited set of command line options can be used to override
493+ package declared options. Overridable options are currently, logging
494+ level and categories, default totality check, warn reach, IBC output
495+ folder, and idris path. Note overriding IBC output folder, only
496+ affects the installation of Idris packages.
497+
498+* Remove deprecated options `--ideslave` and `--ideslave-socket`. These options
499+ were replaced with `--ide-mode` and `--ide-mode-socket` in 0.9.17
500+
501+* The code generator output type `MavenProject` was specific to the
502+ Java codegen and has now been deprecated, together with the
503+ corresponding `--mvn` option.
504+
505+* Definitional equality on Double is now bit-pattern identity rather
506+ than IEEE's comparison operator. This prevents a bug where programs
507+ could distinguish between -0.0 and 0.0, but the type theory could
508+ not, leading to a contradiction. The new fine-grained equality
509+ prevents this.
510+
511+* Naming conventions for Idris packages in an iPKG file now follow the
512+ same rules for executables. Unquoted names must be valid namespaced
513+ Idris identifiers e.g. ``package my.first.package``. Quoted package
514+ names allow for packages to be given valid file names, for example,
515+ ``package "my-first-package"``.
516+
517+## Reflection changes
518+
519+* The implicit coercion from String to TTName was removed.
520+
521+* Decidable equality for TTName is available.
522+
523+# New in 0.11
524+
525+## Updated export rules
526+
527+* The export rules are:
528+ - 'private' means that the definition is not exported at all
529+ - 'export' means that the top level type is exported, but not the
530+ definition. In the case of 'data', this means the type constructor is
531+ exported but not the data constructors.
532+ - 'public export' means that the entire definition is exported.
533+* By default, names are 'private'. This can be altered with an %access directive
534+ as before.
535+* Exported types can only refer to other exported names
536+* Publicly exported definitions can only refer to publicly exported names
537+
538+## Improved C FFI
539+
540+* Idris functions can now be passed as callbacks to C functions or wrapped in a
541+ C function pointer.
542+* C function pointers can be called.
543+* Idris can access pointers to C globals.
544+
545+## Effects
546+
547+* Effects can now be given in any order in effect lists (there is no need for
548+ the ordering to be preserved in sub lists of effects)
549+
550+## Elaborator reflection updates
551+
552+* Datatypes can now be defined from elaborator reflection:
553+ - declareDatatype adds the type constructor declaration to the context
554+ - defineDatatype adds the constructors to the datatype
555+ - To declare an inductive-recursive family, declare the types of the function
556+ and the type constructor before defining the pattern-match cases and
557+ constructors.
558+
559+## Minor language changes
560+
561+* The `[static]` annotation is changed to `%static` to be consistent with the
562+ other annotations.
563+* Added `%auto_implicits` directive. The default is `%auto_implicits on`.
564+ Placing `%auto_implicits off` in a source file means that after that point,
565+ any implicit arguments must be bound, e.g.:
566+
567+ ```
568+ append : {n,m,a:_} -> Vect n a -> Vect m a -> Vect (n + m) a
569+ ```
570+
571+ Only names which are used explicitly in the type need to be bound, e.g.:
572+
573+ ```
574+ Here : {x, xs : _} -> Elem x (x :: xs)
575+ ```
576+
577+ In `Here`, there is no need to bind any of the variables in the type of `xs`
578+ (it could be e.g. `List a` or `Vect n a`; `a` and `n` will still be implicitly
579+ bound).
580+
581+ You can still implicitly bind with 'using':
582+
583+ ```
584+ using (xs : Vect _ _)
585+ data Elem : {a, n : _} -> a -> Vect n a -> Type where
586+ Here : {x : _} -> Elem x (x :: xs)
587+ There : {x, y : _} -> Elem x xs -> Elem x (y :: xs)
588+ ```
589+
590+ However, note that *only* names which appear in *both* the using block
591+ *and* the type being defined will be implicitly bound. The following will
592+ therefore fail because 'n' isn't implicitly bound:
593+
594+ ```
595+ using (xs : Vect n a)
596+ bad : Elem x xs -> Elem x (y :: xs)
597+ ```
598+
599+* `Sigma` has been renamed to `DPair`.
600+* Accessor functions for dependent pairs have been renamed to bring them into
601+ line with standard accessor functions for pairs. The function `getWitness` is
602+ now `fst`, and `getProof` is `snd`.
603+* File Modes expanded: Append, ReadWriteTruncate, and ReadAppend added, Write is
604+ deprecated and renamed to WriteTruncate.
605+* C11 Extended Mode variations added to File Modes.
606+* More flexible holes. Holes can now depend on other holes in a term (such as
607+ implicit arguments which may be inferred from the definition of the hole).
608+* Programs with holes can now be compiled. Attempting to evaluate an expression
609+ with a hole results in a run time error.
610+* Dependent pairs now can be specified using a telescope-style syntax, without
611+ requirement of nesting, e.g. it is possible to now write the following:
612+
613+ ```
614+ (a : Type ** n : Nat ** Vect n a)
615+ ```
616+
617+* Idris will give a warning if an implicit is bound automatically, but would
618+ otherwise be a valid expressio if the name was used as a global
619+
620+## External Dependencies
621+
622+* Curses has been removed as an external dependency.
623+
624+# New in 0.10
625+
626+* `class` and `instance` are now deprecated keywords. They have been replaced by
627+ `interface` and `implementation` respectively. This is to properly reflect
628+ their purpose.
629+* `(/)` operator moved into new Fractional interface.
630+* Idris' logging infrastructure has been categorised. Command line and repl are
631+ available. For command line the option `--logging-categories CATS` is used to
632+ pass in the categories. Here `CATS` is a colon separated quoted string
633+ containing the categories to log. The REPL command is `logcats CATS`. Where
634+ `CATS` is a whitespace separated list of categoriese. Default is for all
635+ categories to be logged.
636+* New flag `--listlogcats` to list logging categories.
637+
638+# New in 0.9.20
639+
640+## Language updates
641+
642+* Improved unification by implementing a pattern unification rule
643+* The syntax `` `{{n}}`` quotes n without resolving it, allowing short syntax for
644+ defining new names. `` `{n}`` still quotes n to an existing name in scope.
645+* A new primitive operator `prim__strSubstr` for more efficient extraction of
646+ substrings. External code generators should implement this.
647+* The previous syntax for tactic proofs and the previous interactive prover are
648+ now deprecated in favour of reflected elaboration. They will be removed at
649+ some point in the future.
650+* Changed scoping rules for unbound implicits: any name which would be a valid
651+ unbound implicit is now *always* an unbound implicit. This is much more
652+ resilient to changes in inputs, but does require that function names be
653+ explicitly qualified when in argument position.
654+* Name binding in patterns follows the same rule as name binding for implicits
655+ in types: names which begin with lower case letters, not applied to any
656+ arguments, are treated as bound pattern variables.
657+* Added `%deprecate` directive, which gives a warning and a message when a
658+ deprecated name is referenced.
659+
660+## Library updates
661+
662+* The `Neg` class now represents numeric types which can be negative. As such,
663+ the `(-)` operator and `abs` have been moved there from `Num`.
664+* A special version of `(-)` on `Nat` requires that the second argument is
665+ smaller than or equal to the first. `minus` retains the old behaviour,
666+ returning `Z` if there is an underflow.
667+* The `(+)`, `(-)`, and `(*)` operations on Fin have been removed.
668+* New Logging Effects have been added to facilitate logging of effectful
669+ programmes.
670+* Elaborator reflection is now a part of the prelude. It is no longer necessary
671+ to import `Language.Reflection.Elab`.
672+* The `PERF` effect allows for simple performance metrics to be collected from
673+ Effectful programs.
674+* Some constructors that never actually occurred have been removed from the `TT`
675+ and `Raw` reflection datatypes in Language.Reflection.
676+* File `IO` operations (for example openFile/fread/fwrite) now return
677+ `Either FileError ty` where the return type was previously `ty` to indicate
678+ that they may fail.
679+
680+## Tool updates
681+
682+* Records are now shown as records in `:doc`, rather than as the underlying
683+ datatype
684+* iPKG files have a new option `pkgs` which takes a comma-separated list of
685+ package names that the idris project depends on. This reduces bloat in the
686+ `opts` option with multiple package declarations.
687+* iPKG files now allow `executable = "your filename here"` in addition to the
688+ Existing `Executable = yourFilenameHere` style. While the unquoted version is
689+ limited to filenames that look like namespaced Idris identifiers
690+ (`your.filename.here`), the quoted version accepts any valid filename.
691+* Add definition command (`\d` in Vim, `Ctrl-Alt-A` in Atom, `C-c C-s` in Emacs)
692+ now adds missing clauses if there is already a definition.
693+
694+## Miscellaneous updates
695+
696+* Disable the deprecation warnings for %elim and old-style tactic scripts with
697+ the `--no-elim-deprecation-warnings` and `--no-tactic-deprecation-warnings`
698+ flags.
699+
700+# New in 0.9.19
701+
702+* The Idris Reference manual has been fleshed out with content originally found
703+ on the GitHub wiki.
704+* The `Show` class has been moved into `Prelude.Show` and augmented with the
705+ method `showPrec`, which allows correct parenthesization of showed terms. This
706+ comes with the type `Prec` of precedences and a few helper functions.
707+* New REPL command `:printerdepth` that sets the pretty-printer to only descend
708+ to some particular depth when printing. The default is set to a high number to
709+ make it less dangerous to experiment with infinite structures. Infinite depth
710+ can be set by calling :printerdepth with no argument.
711+* Compiler output shows applications of `>>=` in do-notation
712+* `fromInteger i` where `i` is an integer constant is now shown just as `i` in
713+ compiler output
714+* An interactive shell, similar to the prover, for running reflected elaborator
715+ actions. Access it with `:elab` from the REPL.
716+* New command-line option `--highlight` that causes Idris to save highlighting
717+ information when successfully type checking. The information is in the same
718+ format sent by the IDE mode, and is saved in a file with the extension ".idh".
719+* Highlighting information is saved by the parser as well, allowing it to
720+ highlight keywords like `case`, `of`, `let`, and `do`.
721+* Use predicates instead of boolean equality proofs as preconditions on `List`
722+ functions
723+* More flexible 'case' construct, allowing each branch to target different
724+ types, provided that the case analysis does not affect the form of any
725+ variable used in the right hand side of the case.
726+* Some improvements in interactive editing, particularly in lifting out
727+ definitions and proof search.
728+* Moved `System.Interactive`, along with `getArgs` to the Prelude.
729+* Major improvements to reflected elaboration scripts, including the ability to run
730+ them in a declaration context and many bug fixes.
731+* `decl syntax` rules to allow syntax extensions at the declaration level
732+* Experimental Windows support for console colours
733+
734+# New in 0.9.18:
735+
736+* GHC 7.10 compatibility
737+* Add support for bundled toolchains.
738+* Strings are now UTF8 encoded in the default back end
739+* Idris source files are now assumed to be in UTF8, regardless of locale
740+ settings.
741+* Some reorganisation of primitives:
742+ + `Buffer` and `BitVector` primitives have been removed (they were not tested
743+ sufficiently, and lack a maintainer)
744+ + `Float` has been renamed `Double` (`Float` is defined in the Prelude for
745+ compatibility)
746+ + Externally defined primitives and operations now supported with `%extern`
747+ directive, allowing back ends to define their own special purpose primitives
748+ + `Ptr` and `ManagedPtr` have been removed and replaced with external primitives
749+* Add `%hint` function annotation, which allows functions to be used as hints in
750+ proof search for `auto` arguments. Only functions which return an instance of
751+ a data or record type are allowed as hints.
752+* Syntax rules no longer perform variable capture. Users of effects will need to
753+ explicitly name results in dependent effect signatures instead of using the
754+ default name `result`.
755+* Pattern-matching lambdas are allowed to be impossible. For example,
756+ `Dec (2 = 3)` can now be constructed with `No $ \(Refl)` impossible, instead of
757+ requiring a separate lemma.
758+* Case alternatives are allowed to be impossible:
759+
760+ ```
761+ case Vect.Nil {a=Nat} of { (x::xs) impossible ; [] => True }
762+ ```
763+
764+* The default `Semigroup` and `Monoid` instances for Maybe are now prioritised
765+ choice, keeping the first success as Alternative does. The version that
766+ collects successes is now a named instance.
767+* `:exec` REPL command now takes an optional expression to compile and run/show
768+* The return types of `Vect.findIndex`, `Vect.elemIndex` and `Vect.elemIndexBy`
769+ were changed from `Maybe Nat` to `Maybe (Fin n)`
770+* A new `:browse` command shows the contents of a namespace
771+* `` `{n}`` is syntax for a quotation of the reflected representation
772+ of the name `n`. If `n` is lexically bound, then the resulting
773+ quotation will be for it, whereas if it is not, then it will succeed
774+ with a quotation of the unique global name that matches.
775+* New syntax for records that closely matches our other record-like structures:
776+ type classes. See the updated tutorial for details.
777+* Records can be coinductive. Define coinductive records with the `corecord`
778+ keyword.
779+* Type class constructors can be assigned user-accessible names. This is done
780+ using the same syntax as record constructors.
781+* `if ... then ... else ...` is now built-in syntax instead of being defined in
782+ a library. It is shown in REPL output and error messages, rather than its
783+ desugaring.
784+* The desugaring of `if ... then ... else ...` has been renamed to `ifThenElse`
785+ from `boolElim`. This is for consistency with GHC Haskell and
786+ scala-virtualized, and to reflect that if-notation makes sense with non-Bool
787+ datatypes.
788+* Agda-style semantic highlighting is supported over the IDE protocol.
789+* Experimental support for elaborator reflection. Users can now script the
790+ elaborator, for use in code generation and proof automation. This feature is
791+ still under rapid development and is subject to change without notice. See
792+ Language.Reflection.Elab and the %runElab constructs
793+
794+# New in 0.9.17
795+
796+* The `--ideslave` command line option has been replaced with a `--ide-mode`
797+ command line option with the same semantics.
798+* A new tactic `claim N TY` that introduces a new hole named `N` with type `TY`
799+* A new tactic `unfocus` that moves the current hole to the bottom of the
800+ hole stack
801+* Quasiquotation supports the generation of `Language.Reflection.Raw` terms in
802+ addition to `Language.Reflection.TT`. Types are used for disambiguation,
803+ defaulting to `TT` at the REPL.
804+* `Language.Reflection.Quotable` now takes an extra type parameter which
805+ determines the type to be quoted to. Instances are provided to quote common
806+ types to both `TT` and `Raw`.
807+* Library operators have been renamed for consistency with Haskell. In
808+ particular, `Applicative.(<$>)` is now `Applicative.(<*>)` and `(<$>)` is now
809+ an alias for Functor.map. Correspondingly, ($>) and (<$) have been renamed to
810+ `(<*)` and `(*>)`. The cascading effects of this rename are that
811+ `Algebra.(<*>)` has been renamed to `Algebra.(<.>)` and `Matrix.(<.>)` is now
812+ `Matrix.(<:>)`.
813+* Binding forms in DSL notation are now given an extra argument: a reflected
814+ representation of the name that the user chose. Specifically, the rewritten
815+ `lambda`, `pi`, and `let` binders will now get an extra argument of type
816+ `TTName`. This allows more understandable dynamic errors in DSL code and more
817+ readable code generation results.
818+* DSL notation can now be applied with `$`
819+* Added `FFI_Export` type which allows Idris functions to be exportoed and
820+ called from foreign code
821+* Instances can now have documentation strings.
822+* Type providers can have documentation strings.
823+* Unification errors now (where possible) contain information about provenance
824+ of a type
825+* New REPL command `:core TM` that shows the elaborated form of `TM` along with
826+ its elaborated type using the syntax of `TT`. IDE mode has a corresponding
827+ command `:elaborate-term` for serialized terms.
828+* Effectful and IO function names for sending data to STDOUT have been
829+ aligned, semantically.
830+ + `print` is now for putting showable things to STDOUT.
831+ + `printLn` is for putting showable things to STDOUT with a new line
832+ + `putCharLn` for putting a single character to STDOUT, with a new line.
833+* Classes can now be annotated with 'determining parameters' to say which must
834+ be available before resolving instances. Only determining parameters are
835+ checked when checking for overlapping instances.
836+* New package `contrib` containing things that are less mature or less used than
837+ the contents of `base`. `contrib` is not available by default, so you may need
838+ to add `-p contrib` to your .ipkg file or Idris command line.
839+* Arguments to class instances are now checked for injectivity. Unification
840+ assumes this, so we need to check when instances are defined.
841+
842+# New in 0.9.16
843+
844+* Inductive-inductive definitions are now supported (i.e. simultaneously defined
845+ types where one is indexed by the other.)
846+* Implicits and type class constraints can now appear in scopes other than the
847+ top level.
848+* Importing a module no longer means it is automatically reexported. A new
849+ `public` modifier has been added to import statements, which will reexport the
850+ names exported from that module.
851+* Implemented `@`-patterns. A pattern of the form `x@p` on the left hand side
852+ matches `p`, with `x` in scope on the right hand side with value `p`.
853+* A new tactic sourceLocation that fills the current hole with the current
854+ source code span, if this information is available. If not, it raises an
855+ error.
856+* Better Unicode support for the JavaScript/Node codegen
857+* `:search` and `:apropos` commands can now be given optional package lists to
858+ search.
859+* `Vect`, `Fin` and `So` moved out of prelude into `base`, in modules
860+ `Data.Vect`, `Data.Fin` and `Data.So` respectively.
861+* Several long-standing issues resolved, particularly with pattern matching and
862+ coverage checking.
863+* Modules can now have API documentation strings.
864+
865+# New in 0.9.15
866+
867+* Two new tactics: `skip` and `fail`. Skip does nothing, and fail takes a string
868+ as an argument and produces it as an error.
869+* Corresponding reflected tactics `Skip` and `Fail`. Reflected `Fail` takes a
870+ list of `ErrorReportParts` as an argument, like error handlers produce,
871+ allowing access to the pretty-printer.
872+* Stop showing irrelevant and inaccessible internal names in the interactive
873+ prover.
874+* The proof arguments in the `List` library functions are now implicit and
875+ solved automatically.
876+* More efficient representation of proof state, leading to faster elaboration of
877+ large expressions.
878+* *EXPERIMENTAL* Implementation of uniqueness types
879+* Unary negation now desugars to `negate`, which is a method of the `Neg` type
880+ class. This allows instances of `Num` that can't be negative, like `Nat`, and
881+ it makes correct IEEE Float operations easier to encode. Additionally, unary
882+ negation is now available to DSL authors.
883+* The Java and LLVM backends have been factored out for separate
884+ maintenance. Now, the compiler distribution only ships with the C and
885+ JavaScript backends.
886+* New REPL command `:printdef` displays the internal definition of a name
887+* New REPL command `:pprint` pretty-prints a definition or term with LaTeX or
888+ HTML highlighting
889+* Naming of data and type constructors is made consistent across the standard
890+ library (see #1516)
891+* Terms in `code blocks` inside of documentation strings are now parsed and type
892+ checked. If this succeeds, they are rendered in full color in documentation
893+ lookups, and with semantic highlighting for IDEs.
894+* Fenced code blocks in docs defined with the "example" attribute are rendered
895+ as code examples.
896+* Fenced code blocks declared to be Idris code that fail to parse or type check
897+ now provide error messages to IDE clients.
898+* *EXPERIMENTAL* support for partial evaluation (Scrapping your Inefficient
899+ Engine style)
900+
901+# New in 0.9.14
902+
903+* Tactic for case analysis in proofs
904+* Induction and case tactic now work on expressions
905+* Support for running tests for a package with the tests section of .ipkg files
906+ and the `--testpkg` command-line option
907+* Clearly distinguish between type providers and postulate providers at the use
908+ site
909+* Allow dependent function syntax to be overridden in dsl blocks, similarly to
910+ functions and let. The keyword for this is `pi`.
911+* Updated `effects` library, with simplified API
912+* All new JavaScript backend (avoids callstack overflows)
913+* Add support for `%lib` directive for NodeJS
914+* Quasiquotes and quasiquote patterns allow easier work with reflected
915+ terms. `` `(EXPR)`` quasiquotes EXPR, causing the elaborator to be
916+ used to produce a reflected version of it. Subterms prefixed with `~`
917+ are unquoted - on the RHS, they are reflected terms to splice in,
918+ while on the LHS they are patterns.
919+
920+ A quasiquote expression can be given a goal type for the elaborator,
921+ which helps with disambiguation. For instance, `` `(() : ())``
922+ quotes the unit constructor, while `` `(() : Type)`` quotes the unit
923+ type. Both goal types and quasiquote are typechecked in the global
924+ environment.
925+* Better inference of unbound implicits
926+
927+# New in 0.9.13
928+
929+* IDE support for retrieving structured information about metavariables
930+* Experimental Bits support for JavaScript
931+* IdrisDoc: a Haddock- and JavaDoc-like HTML documentation generator
932+* Command line option `-e` (or `--eval`) to evaluate expressions without loading
933+ the REPL. This is useful for writing more portable tests.
934+* Many more of the basic functions and datatypes are documented.
935+* Primitive types such as Int and String are documented
936+* Removed javascript lib in favor of idris-hackers/iQuery
937+* Specify codegen for :compile REPL command (e.g. `:compile` javascript
938+ program.js)
939+* Remove `:info` REPL command, subsume and enhance its functionality in the `:doc` command
940+* New (first class) nested record update/access syntax:
941+
942+ ```
943+ record { a->b->c = val } x -- sets field accessed by c (b (a x)) to val
944+ record { a->b->c } x -- accesses field, equivalent to c (b (a x))
945+ ```
946+
947+* The banner at startup can be suppressed by adding `:set` nobanner to the initialisation script.
948+* `:apropos` now accepts space-delimited lists of query items, and searches for
949+ the conjunction of its inputs. It also accepts binder syntax as search
950+ strings - for instance, `->` finds functions.
951+* Totality errors are now treated as warnings until code generation time, when
952+ they become errors again. This allows users to use the interactive editing
953+ features to fix totality issues, but no programs that violate the stated
954+ assumptions will actually run.
955+* Added `:makelemma` command, which adds a new top level definition to solve a
956+ metavariable.
957+* Extend `:addclause` to add instance bodies as well as definitions
958+* Reverse parameters to `BoundedList` -- now matches `Vect`, and is easier to
959+ instantiate classes.
960+* Move `foldl` into Foldable so it can be overridden.
961+* Experimental `:search` REPL command for finding functions by type
962+
963+## Internal changes
964+
965+* New implementation of erasure
966+
967+# New in 0.9.12
968+
969+* Proof search now works for metavariables in types, giving some interactive
970+ type inference.
971+* New `Lazy` type, replacing laziness annotations.
972+* JavaScript and Node codegen now understand the `%include` directive.
973+* Concept of `null` is now understood in the JavaScript and Node codegen.
974+* Lots of performance patches for generated JavaScript.
975+* New commands `:eval` (`:e`) and `:type` (`:t`) in the prover, which either
976+ normalise or show the type of expressions.
977+* Allow type providers to return postulates in addition to terms.
978+* Syntax for dealing with match failure in `<-` and pattern matching let.
979+* New syntax for inline documentation. Documentation starts with `|||`, and
980+ arguments are documented by preceding their name with `@`. Example:
981+
982+ ```
983+ ||| Add two natural numbers
984+ ||| @ n the first number (examined by the function)
985+ ||| @ m the second number (not examined)
986+ plus (n, m : Nat) -> Nat
987+ ```
988+
989+* Allow the auto-solve behaviour in the prover to be disabled, for easier
990+ debugging of proof automation. Use `:set autosolve` and `:unset autosolve`.
991+* Updated `effects` library
992+* New `:apropos` command at REPL to search documentation, names, and types
993+* Unification errors are now slightly more informative
994+* Support mixed induction/coinduction with `Inf` type
995+* Add `covering` function option, which checks whether a function and all
996+ descendants cover all possible inputs
997+
998+# New in 0.9.11
999+
1000+* Agda-style equational reasoning (in Syntax.PreorderReasoning)
1001+* 'case' construct now abstracts over the scrutinee in its type
1002+* Added label type 'name (equivalent to the empty type). This is intended for
1003+ field/effect disambiguation. "name" can be any valid identifier. Two labels
1004+ are definitionally equal if they have the same name.
1005+* General improvements in error messages, especially %error_reverse annotation,
1006+ which allows a hint as to how to display a term in error messages
1007+* `--ideslave` mode now transmits semantic information about many of the strings
1008+ that it emits, which can be used by clients to implement semantic highlighting
1009+ like that of the REPL. This has been implemented in the Emacs mode and the IRC
1010+ bot, which can serve as examples.
1011+* New expression form: `with NAME EXPR` privileges the namespace `NAME` when
1012+ disambiguating overloaded names. For example, it is possible to write `with
1013+ Vect [1,2,3]` at the REPL instead of `the (Vect _ _) [1,2,3]`, because the
1014+ `Vect` constructors are defined in a namespace called `Vect`.
1015+* `assert_smaller` internal function, which marks an expression as smaller than
1016+ a pattern for use in totality checking. e.g. `assert_smaller (x :: xs) (f
1017+ xs)` asserts that `f xs` will always be structurally smaller than `(x :: xs)`
1018+* `assert_total` internal function, which marks a subexpression as assumed to be
1019+ total, e.g `assert_total (tail (x :: xs))`.
1020+* Terminal width is automatically detected if Idris is compiled with curses
1021+ support. If curses is not available, automatic mode assumes 80 columns.
1022+* Changed argument order for `Prelude.Either.either`.
1023+* Experimental `neweffects'`library, intended to replace `effects` in the next
1024+ release.
1025+
1026+## Internal changes
1027+
1028+* Faster elaboration
1029+* Smaller .ibc files
1030+* Pretty-printer now used for all term output
1031+
1032+# New in 0.9.10
1033+
1034+* Type classes now implemented as dependent records, meaning that method types
1035+ may now depend on earlier methods.
1036+* More flexible class instance resolution, so that function types and lambda
1037+ expressions can be made instances of a type class.
1038+* Add `!expr` notation for implicit binding of intermediate results in
1039+ monadic/do/etc expressions.
1040+* Extend Effects package to cope with possibly failing operations, using
1041+ `if_valid`, `if_error`, etc.
1042+* At the REPL, `it` now refers to the previous expression.
1043+* Semantic colouring at the REPL. Turn this off with `--nocolour`.
1044+* Some prettifying of error messages.
1045+* The contents of `~/.idris/repl/init` are run at REPL start-up.
1046+* The REPL stores a command history in `~/.idris/repl/history`.
1047+* The `[a..b]`, `[a,b..c]`, `[a..]`, and `[a,b..]` syntax now pass the totality
1048+ checker and can thus be used in types. The `[x..]` syntax now returns an
1049+ actually infinite stream.
1050+* Add `%reflection` option for functions, for compile-time operations on syntax.
1051+* Add expression form `quoteGoal x by p in e` which applies `p` to the expected
1052+ expression type and binds the result to `x` in the scope `e`.
1053+* Performance improvements in Strings library.
1054+* Library reorganisation, separated into `prelude/` and `base/`.
1055+
1056+## Internal changes
1057+
1058+* New module/dependency tree checking.
1059+* New parser implementation with more precise errors.
1060+* Improved type class resolution.
1061+* Compiling Nat via GMP integers.
1062+* Performance improvements in elaboration.
1063+* Improvements in termination checking.
1064+* Various REPL commands to support interactive editing, and a client/server
1065+ mode to allow external invocation of REPL commands.
1066+
1067+# New in 0.9.9
1068+
1069+## User visible changes
1070+
1071+* Apply functions by return type, rather than with arguments: `t <== f` means
1072+ "apply f with arguments such that it returns a value of type t"
1073+* Allow the result type of a rewrite to be specified
1074+* Allow names to be attached to provisional definitions lhs `?= {name} rhs` --
1075+ generates a lemma called `name` which makes the types of the lhs and rhs
1076+ match. `{name}` is optional - a unique name is generated if it is absent.
1077+* Experimental LLVM backend
1078+* Added `Data.HVect` module
1079+* Fix `fromInteger` to take an `Integer`, rather than an `Int`
1080+* Integer literals for `Fin`
1081+* Renamed `O` to `Z`, and `fO` to `fZ`
1082+* Swapped `Vect` arguments, now `Vect : Nat -> Type -> Type`
1083+* Added `DecEq` instances
1084+* Add `equiv` tactic, which rewrites a goal to an equivalent (convertible) goal
1085+
1086+## Internal changes
1087+
1088+* Add annotation for unification traces
1089+* Add `mrefine` tactic for refining by matching against a type
1090+* Type class resolution fixes
1091+* Much faster coverage checking
1092+
1093+# New in 0.9.8
1094+
1095+## User visible changes
1096+
1097+* Added `rewrite ... in ...` construct
1098+* Allow type class constraints in `using` clauses
1099+* Renamed `EFF` to `EFFECT` in Effect package
1100+* Experimental Java backend
1101+* Tab completion in REPL
1102+* Dynamic loading of C libraries in the interpreter
1103+* Testing IO actions at the REPL with `:x` command
1104+* Improve rendering of `:t`
1105+* Fixed some INTERNAL ERROR messages
1106+
1107+## Internal Changes
1108+
1109+* Fix non-linear pattern checking
1110+* Improved name disambiguation
1111+* More flexible unification and elaboration of lambdas
1112+* Various unification and totality checking bug fixes
1113+
1114+# New in 0.9.7
1115+
1116+## User visible changes
1117+
1118+* `implicit` keyword, for implicit type conversion
1119+* Added Effects package
1120+* Primitives for 8,16,32 and 64 bit integers
1121+
1122+## Internal Changes
1123+
1124+* Change unification so that it keeps track of failed constraints in case
1125+ later information helps to resolve them
1126+* Distinguishing parameters and indices in data types
1127+* Faster termination/coverage checking
1128+* Split 'javascript' target into 'javascript' and 'node'
1129+
1130+# New in 0.9.6
1131+
1132+## User visible changes
1133+
1134+* The type of types is now `Type` rather than `Set`
1135+* Forward declarations of data allowed
1136+ - supporting induction recursion and mutually recursive data
1137+* Type inference of definitions in `where` clauses
1138+ - Provided that the type can be completely determined from the first
1139+ application of the function (in the top level definition)
1140+* `mutual` blocks added
1141+ - effect is to elaborate all types of declarations in the block before
1142+ elaborating their definitions
1143+ - allows inductive-recursive definitions
1144+* Expression inspected by `with` clause now abstracted from the goal
1145+ - i.e. "magic" with
1146+* Implicit arguments will be added automatically only if their initial letter is
1147+ lower case, or they are in a using declaration
1148+* Added documentation comments (Haddock style) and `:doc` REPL command
1149+* Pattern matching on strings, big integers and characters
1150+* Added `System.Concurrency` modules
1151+* Added `postulate` declarations
1152+* Allow type annotations on `let` tactic
1153+* EXPERIMENTAL JavaScript generation, with `--target javascript` option
1154+
1155+## Internal Changes
1156+
1157+* Separate inlining methods at compile-time and run-time
1158+* Fixed nested parameters blocks
1159+* Improve efficiency of elaborator by:
1160+ - only normalising when necessary
1161+ - reducing backtracking with resolving ambiguities
1162+* Better compilation of case trees
1163+
1164+# New in 0.9.5
1165+
1166+## User visible changes
1167+
1168+* Added codata
1169+ - as data declarations, but constructor arguments are evaluated lazily
1170+ - functions which return a codata type do not reduce at compile time
1171+* Added `parameters` blocks
1172+* Allow local data definitions in where blocks
1173+* Added `%default` directive to declare total-by-default or partial-by-default
1174+ for functions, and a corresponding "partial" reserved words to mark functions
1175+ as allowed to be partial. Also `--total` and `--partial` added as command line
1176+ options.
1177+* Command line option `--warnpartial` for flagging all undeclared partial
1178+ functions, without error.
1179+* New termination checker supporting mutually recursive definitions.
1180+* Added `:load` command to REPL, for loading a new file
1181+* Added `:module` command to REPL, for adding modules
1182+* Renamed library modules (now have initial capital)
1183+
1184+## Internal changes
1185+
1186+* Several improvements and fixes to unification
1187+* Added collapsing optimisation and more aggressive erasure
1188+
1189+# New in 0.9.4:
1190+
1191+## User visible changes
1192+
1193+* Simple packaging system
1194+* Added `--dumpc` flag for displaying generated code
1195+
1196+## Internal changes
1197+
1198+* Improve overloading resolution (especially where this is a type error)
1199+* Various important bug fixes with evaluation and compilation
1200+* More aggressive compile-time evaluation
1201+
1202+# New in 0.9.3
1203+
1204+## User visible changes
1205+
1206+* Added binding forms to syntax rules
1207+* Named class instances
1208+* Added `:set` command, with options `errorcontext` for displaying local
1209+ variables in scope when a unification error occurs, and `showimplicits`
1210+ for displaying elaborated terms in full
1211+* Added `--errorcontext` command line switch
1212+* Added `:proofs` and `:rmproofs` commands
1213+* Various minor REPL improvements and fixes
1214+
1215+## Internal changes
1216+
1217+* Completely new run time system (not based on Epic or relying on Boehm GC)
1218+* Normalise before forcing to catch more forceable arguments
1219+* Types no longer exported in normal form
1220+* Try to resolve overloading by inspecting types, rather than full type
1221+ checking
1222+
1223+# New in 0.9.2
1224+
1225+## User visible changes
1226+
1227+* backtick notation added: ``x `foo` y ==> foo x y``
1228+* case expressions allowed in type signatures
1229+* Library extensions in prelude.vect and prelude.algebra
1230+* `malloc`/`trace_malloc` added to builtins.idr
1231+
1232+## Internal changes
1233+
1234+* Some type class resolution fixes
1235+* Several minor bug fixes
1236+* Performance improvements in resolving overloading and type classes
1237+
1238+# New in 0.9.1
1239+
1240+## User visible changes
1241+
1242+* DSL notation, for overloading lambda and let bindings
1243+* Dependent records, with projection and update
1244+* Totality checking and `total` keyword
1245+* Auto implicits and default argument values `{auto n : T}`, `{default val n : T}`
1246+* Overlapping type class instances disallowed
1247+* Many extensions to `prelude.nat` and `prelude.list` libraries (mostly thanks to
1248+ Dominic Mulligan)
1249+* New libraries: `control.monad.identity`, `control.monad.state`
1250+* Small improvements in error reporting
1251+
1252+## Internal changes
1253+
1254+* Faster compilation (only compiling names which are used)
1255+* Better type class resolution
1256+* Lots of minor bug fixes
1257+
1258+# 0.1.x to 0.9.0
1259+
1260+Complete rewrite.
1261+
1262+## User visible changes
1263+
1264+* New proof/tactics syntax
1265+* New syntax for pairs/dependent pairs
1266+* Indentation-significant syntax
1267+* Added type classes
1268+* Added where clauses
1269+* Added case expressions, pattern matching let and lambda
1270+* Added monad comprehensions
1271+* Added cumulativity and universe checking
1272+* Ad-hoc name overloading
1273+ - Resolved by type or explicit namespace
1274+* Modules (Haskell-style)
1275+* public, abstract and private access to functions and types
1276+* Separate type-checking
1277+* Improved interactive environment
1278+* Replaced 'do using' with Monad class
1279+* Extended syntax macros
1280+
1281+## Internal changes
1282+
1283+* Everything :-)
1284+* All definitions (functions, classes and instances) are elaborated to top
1285+ level, fully explicit, data declarations and pattern matching definitions,
1286+ which are verified by a minimal type checker.
1287+
1288+This is the first release of a complete reimplementation. There will be bugs.
1289+If you find any, please do not hesitate to contact Edwin Brady
1290+(ecb10@st-andrews.ac.uk).
CITATION.md+1−1
@@ -17,7 +17,7 @@ If you use `Idris` in your work we would prefer it if you would use the followin
1717 pages = {552--593},
1818 numpages = {42},
1919 doi = {10.1017/S095679681300018X},
20− URL = {http://journals.cambridge.org/article_S095679681300018X},
20+ URL = {https://journals.cambridge.org/article_S095679681300018X},
2121}
2222```
2323
CONTRIBUTING.md+25−10
@@ -6,9 +6,9 @@ Here are a few guidelines that we would like contributors to follow so that we c
66
77## Getting Started
88
9−1. Make sure you are familiar with [Git](http://git-scm.com/book).
9+1. Make sure you are familiar with [Git](https://git-scm.com/book).
10101. Make sure you have a [GitHub account](https://github.com/signup/free).
11−1. Make sure you are familiar with: [Idris](http://eb.host.cs.st-andrews.ac.uk/writings/idris-tutorial.pdf).
11+1. Make sure you are familiar with: [Idris](https://eb.host.cs.st-andrews.ac.uk/writings/idris-tutorial.pdf).
12121. Make sure you can install Idris:
1313 * [Mac OS X](https://github.com/idris-lang/Idris-dev/wiki/Idris-on-OS-X-using-Homebrew)
1414 * [Ubuntu](https://github.com/idris-lang/Idris-dev/wiki/Idris-on-Ubuntu)
@@ -20,6 +20,21 @@ Here are a few guidelines that we would like contributors to follow so that we c
2020Before you report an issue, or wish to add cool functionality please try and check to see if there are existing [issues](https://github.com/idris-lang/Idris-dev/issues) and [pull requests](https://github.com/idris-lang/Idris-dev/pulls).
2121We do not want you wasting your time, duplicating somebody's work!
2222
23+### Template
24+Try as closely as possible to describe the issue, ensuring that it has sections that match the following headings:
25+> \# Steps to Reproduce
26+>
27+> \# Expected Behavior
28+>
29+> \# Observed Behavior
30+>
31+>
32+
33+In addition, please attach complete source files that exhibit the issue to quoting from them in the issue.
34+
35+### Feature Requests
36+We would be delighted to receive feature requests only if they are feasible to implement and the author is willing to implement the suggested features themself. The current Idris developer team consists mostly of volunteers, and so it is unfortunately hard to accommodate implementing nice-to-have ideas that are not essential for core language development.
37+
2338## The Campsite Rule
2439
2540We try to follow the **campsite rule**: leave the code base in better condition than you found it.
@@ -49,7 +64,7 @@ Major changes to the library, or Idris itself, should be discussed first through
4964
50651. The mailing List.
51661. On our IRC Channel `#idris` on freenode, or
52−1. As a [Dragon Egg](https://github.com/idris-lang/Idris-dev/wiki/Feature-proposals).
67+1. As an RFC in the issue tracker
5368
5469Developers then seeking to add content to Idris's prelude and default library, should do so through a PR where more discussions and refinements can be made.
5570
@@ -57,7 +72,7 @@ We do not want you wasting your time nor duplicating somebody's work!
5772
5873## Making Changes
5974
60−Idris developers and hackers try to adhere to something similar to the [successful git branching model](http://nvie.com/posts/a-successful-git-branching-model/).
75+Idris developers and hackers try to adhere to something similar to the [successful git branching model](https://nvie.com/posts/a-successful-git-branching-model/).
6176The steps are described below.
6277
6378### New contributors
@@ -68,7 +83,7 @@ For those new to the project:
68832. Clone your fork to your local machine:
6984
7085```
71−$ git clone git@github.com/<your github user name>/Idris-dev.git
86+$ git clone git@github.com:<your github user name>/Idris-dev.git
7287```
7388
74893. Add `idris-lang/Idris-dev` as a remote upstream
@@ -157,13 +172,13 @@ To help increase the chance of your pull request being accepted:
157172
158173* [Idris Wiki](https://github.com/idris-lang/Idris-dev/wiki);
159174* [Zen Of Idris](https://github.com/idris-lang/Idris-dev/wiki/The-Zen-of-Idris);
160−* Idris FAQs: [Official](http://www.idris-lang.org/documentation/faq/); [Unofficial](https://github.com/idris-lang/Idris-dev/wiki/Unofficial-FAQ);
175+* Idris FAQs: [Official](https://idris.readthedocs.io/en/latest/faq/faq.html); [Unofficial](https://github.com/idris-lang/Idris-dev/wiki/Unofficial-FAQ);
161176* [Idris Manual](https://github.com/idris-lang/Idris-dev/wiki/Manual);
162−* [Idris Tutorial](http://eb.host.cs.st-andrews.ac.uk/writings/idris-tutorial.pdf);
163−* [Idris News](http://www.idris-lang.org/news/);
164−* [other Idris docs](http://www.idris-lang.org/documentation/).
177+* [Idris Tutorial](https://idris.readthedocs.io/en/latest/tutorial/index.html);
178+* [Idris News](https://www.idris-lang.org/news/);
179+* [other Idris docs](https://www.idris-lang.org/documentation/).
165180* [Using Pull Requests](https://help.github.com/articles/using-pull-requests)
166181* [General GitHub Documentation](https://help.github.com/).
167182
168183
169−Adapted from the most excellent contributing files from the [Puppet project](https://github.com/puppetlabs/puppet) and [Factroy Girl Rails](https://github.com/thoughtbot/factory_girl_rails/blob/master/CONTRIBUTING.md)
184+Adapted from the most excellent contributing files from the [Puppet project](https://github.com/puppetlabs/puppet) and [Factory Girl Rails](https://github.com/thoughtbot/factory_girl_rails/blob/master/CONTRIBUTING.md)
CONTRIBUTORS+215−31
@@ -1,45 +1,229 @@
11Thanks to the following for their help and contributions:
22
3−Ozgur Akgun
3+a3gis
4+Aaron Craelius
5+Adam Sandberg Eriksson
6+Adam Schønemann
7+Adolfo Ochagavía
48Ahmad Salim Al-Sibahi
5−Edward Chadwick Amsden
6−Jan Bessai
7−Michael R. Bernstein
8−Nicola Botta
9−Edwin Brady
10−Jakob Brünker
9+Aistis Raulinaitis
10+Alex Feldman-Crough
11+Alex S. Queiroz e Silva
12+Alexander Berntsen
13+Alexander Shabalin
1114Alyssa Carter
12−David Raymond Christiansen
15+Andreas Bogk
16+Andreas Reuleaux
17+Andrei Dziahel
18+Andrew Cann
19+Andrew Stewart Gibson
20+Andy Morris
21+Anthony Cantor
22+Anthony---faineance
23+Apostolis Xekoukoulotakis
24+Athan Clark
25+Bartosz Przygoda
26+Ben Gamari
27+Ben Sherman
28+ben-schulz
29+Benjamin Hodgson
30+Benjamin Saunders
31+Björn Aili
32+bmastenbrook
33+Brent Yorgey
34+Brian Koropoff
35+Brian McKenna
36+Bryn Keller
37+Caleb Case
38+Calvin Beck
39+Carsten König
1340Carter Charbonneau
14−Jason Dagit
15−Simon Fowler
16−Google
41+Casper M. H. Holmgreen
42+cchantep
1743Cezar Ionescu
44+Chao-Hong Chen
45+Chetan Taralekar
46+Chris Allen
47+Chris Gibbs
48+Christopher Schwaab
49+Cliff Harvey
50+Cliff L. Biffle
51+Colin Adams
52+comco
53+Craig McLaughlin
54+cswords
55+Daniel Waterworth
56+Daniël Heres
57+Darin Morrison
58+David Feuer
59+David Kraeutmann
60+David Raymond Christiansen
61+defanor
62+Dennis Griffith
63+Dirk Ullrich
64+Dmitry Bushev
65+Dmitry Tsygankov
66+Dominic Mulligan
67+Dominik Peteler
68+Echo Nolan
69+Eduard Nicodei
70+Edward Amsden
71+Edward O'Callaghan
72+Edwin Brady
73+Eric Casteleijn
74+Eric Mertens
75+Eric Walkingshaw
76+Eric Weinstein
77+Erkin Batu Altunbaş
78+Ertugrul Söylemez
79+EvanR
80+Fabian Thorand
81+fiendfan1
82+Franklin Chen
83+Frederic Koehler
84+Friedrich von Never
85+Gabe McArthur
86+Gabor Greif
87+Gabriel Garcia
88+George Leontiev
89+Gleb Alexeyev
90+Google
91+Greg Anderson
92+Greg Pfeil
93+Guglielmo Fachini
94+Hannes Mehnert
1895Heath Johns
96+Heather
97+Hector A. Escobedo IV
98+identical snowflake
99+Ignas Vyšniauskas
100+Ilan Godik
101+Imuli
19102Irene Knapp
20−Paul Koerbitz
21−Niklas Larsson
22−Shea Levy
103+Jack Henahan
104+Jacob Mitchell
105+Jakob Brünker
106+Jan Bessai
107+Jan de Muijnck-Hughes
108+Jan Doms
109+Jan Stolarek
110+Jason Dagit
111+Jason Felice
112+Jason Gross
113+Jean-Remi Desjardins
114+Jeff Hemphill
115+Jefferson Carpenter
116+Jens Petersen
117+Jeremy W. Sherman
118+jhegedus42
119+joe9
120+Johannes Griebler
121+John Connor
122+John Dobronszki
123+John Wiegley
124+Jon Atack
125+Jonas De Vuyst
126+Jonas Westerlund
127+Jonathan Sterling
128+Joomy Korkut
129+Jorge Acereda
130+Joseph Huang
131+Josh Vera
132+JP Smith
133+Juliusz Chroboczek
134+Jurriën Stutterheim
135+Jürgen Peters
136+Karlos Kaeeikaas
137+Kester Tong
138+lambdadomain
139+Langston Barrett
140+Leif Warner
141+Leon Schoorl
142+Luke Palmer
143+Mark Farrell
144+Markus Klink
145+Markus Pfeiffer
146+Martin Baker
23147Mathnerd314
24−Hannes Mehnert
148+Mattias Lundell
149+Matvey B. Aksenov
150+Matúš Tejiščák
151+Maxim Ivanov
25152Mekeor Melire
26153Melissa Mozifian
27−Dominic Mulligan
28−Jan de Muijnck-Hughes
29−Tom Prince
30−raichoo
154+Melvar Chen
155+Michael A. Smith
156+Michael Bernstein
157+Michael Gilliland
158+Michael Hensler
159+Michael Maloney
160+Michael McGirr
161+Michael Morgan
162+Michael Thompson
163+Michael Weiss
164+Miikka Koskinen
165+Mitchell Rosen
166+Miëtek Bak
167+Mort Yao
168+Nathan Dinsmore
169+Nicola Botta
170+Niklas Larsson
171+Norbert Melzer
172+Oskar Wickström
173+Ozgur Akgun
174+Patrick Hilhorst
175+Patrik Jansson
176+Paul Koerbitz
177+Per Fredelius
178+Peter Minten
31179Philip Rasmussen
32−Reynir Reynisson
33−Adam Sandberg Eriksson
180+PoroCYon
181+raichoo
182+Reynir Björnsson
183+Ricky Elrod
184+Robert Clipsham
185+Robert Edström
186+Ross Meikleham
187+Rui Barreiro
188+Ryan Scott
189+Sam Elliott
190+Sam T
191+Saurabh Rawat
192+Sean Hunt
193+Sebastian de Bellefon
194+Sebastian Dröge
34195Seo Sanghyeon
35−Benjamin Saunders
36−Alexander Shabalin
37−Timo Petteri Sinnemäki
38−JP Smith
196+Sergei Trofimovich
197+Shane Pearman
198+Shea Levy
199+Simon Fowler
39200startling
40−Chetan T
41−Matúš Tejiščák
42−Dirk Ullrich
43−Leif Warner
44−Daniel Waterworth
45−Jonas Westerlund
201+Stefan Bleibinhaus
202+stepcut
203+Stephen Drodge
204+Steven Shaw
205+Stuart Gale
206+suhorng
207+Sune Alkærsig
208+Sven Koschnicke
209+Taran Lynn
210+tdidriksen
211+Tenor Biel
212+Thomas Cooper
213+Thomas Scholtes
214+Tim Dysinger
215+Tim McGilchrist
216+Timo Petteri Sinnemäki
217+Tom Prince
218+TorosFanny
219+Trevor Elliott
220+uwap
221+Vitaly Bragilevsky
222+Vyacheslav Shebanov
223+xged
224+XIE Yuheng
225+Yacine Hmito
226+Zack Grannan
227+Zheng Jihui
228+zjhmale
229+Сухарик
INSTALL.mdnew file+153
@@ -0,0 +1,153 @@
1+# Idris Installation Guide
2+
3+Copyright (C) 2015, The Idris Community
4+
5+## Installing Idris from Hackage
6+
7+This repository represents the latest development version of the
8+language, and may contain bugs that are being actively worked on. For
9+those who wish to use a more stable version of Idris please consider
10+installing the latest version that has been released on Hackage.
11+Installation instructions for various platforms can be
12+[found on the Idris Wiki](https://github.com/idris-lang/Idris-dev/wiki/Installation-Instructions).
13+
14+## Installing Development Versions
15+
16+If you like to work against the latest development version, please
17+consider using Cabal Sandboxes to minimise disruption to your local
18+Haskell setup. Instructions for installing Idris HEAD within a cabal
19+sandbox are
20+[available on the Idris Wiki](https://github.com/idris-lang/Idris-dev/wiki/Installing-an-Idris-Development-version-in-a-sandbox).
21+
22+To configure, edit config.mk. The default values should work for most
23+people.
24+
25+Idris is built using a Makefile common targets include:
26+
27+* `make` This will install everything using cabal and typecheck the
28+ libraries.
29+* `make test` This target execute the test suite.
30+* `make relib` This target will typecheck and recompile the standard
31+ library.
32+
33+Idris has an optional dependency on the `C` library `libffi`. If you
34+would like to use the features that it enables, make sure that it is
35+compiled for the same architecture as your Haskell compiler (e.g. 64
36+bit libraries for 64 bit ghc). By default, Idris builds without it. To
37+build with it, pass the flag `-f FFI`.
38+
39+A secondary optional dependency is on `libGMP`, this allows better
40+support for numeric operations. As with `libFFI` Idris builds with out
41+it, to enable `GMP` support use the flag `-f GMP`
42+
43+To build with `libffi` and `libGMP` by default, create a `custom.mk`
44+file and add the following line to it:
45+
46+`CABALFLAGS += -f FFI -f GMP`
47+
48+The file `custom.mk-alldeps` is a suitable example.
49+
50+The continuous integration builds on travis-ci.org are built using the
51+ghc-flag -Werror. To enable this behaviour locally also, please
52+compile using `make CI=true` or adding the following line into
53+`custom.mk`:
54+
55+`CI = true`
56+
57+If you are only compiling for installing the most current version, you
58+can omit the CI flag, but please make sure you use it if you want to
59+contribute.
60+
61+## Experimental Support for Building with Stack
62+
63+[Stack](https://github.com/commercialhaskell/stack) is a new
64+cross-platform program for developing Haskell projects, that enhances
65+the functionality provided by Cabal. There is experimental support for
66+building Idris from source with stack.
67+
68+This installation has been tested on Ubuntu 16.04.1 LTS, and the current
69+NixOS unstable.
70+
71+*Important* Stack will not install any external dependencies required
72+to build Idris. Before you try stack please ensure you have the
73+correct dependencies.
74+
75+To build Idris with stack use the following command:
76+
77+* `stack build`
78+
79+To install Idris:
80+
81+* `stack install`
82+
83+Stack will install Idris (and related executables) into `$HOME/.local/bin/`
84+on Unix based systems and an appropriate place on Windows. The libraries that
85+are included with Idris (e.g. Builtins, Prelude) will 'install' into `<source
86+dir>/.stack_work/install/...` so you'll need to keep your source directory
87+around after you've installed Idris using Stack.
88+
89+Of note: If you haven't used stack before commands will also setup the
90+related infrastructure. For more information about Stack please visit
91+the [Stack website](https://github.com/commercialhaskell/stack).
92+
93+On NixOS, please use the following command instead, to make sure
94+the required libraries and header files are available:
95+
96+* `stack build --nix`
97+
98+### before rebuilding new pulls
99+the default build will currently just reuse `.ibc` files which can result
100+in build-failures in the `Building libraries...` phase.
101+
102+A safer way to do this is therefore to recursively delete all the `*.ibc`
103+files from the `libs/` folder.
104+
105+On Linux(or similar) you can do this with
106+
107+ find . -name "*.ibc" -exec rm -rf {} \;
108+
109+### System GHC
110+
111+The flag `--system-ghc` can be added to enforce use of your system's
112+version of GHC.
113+
114+### `libGMP` and `libFFI`
115+
116+By default the stack configuration in `stack.yaml` will build with
117+support for `libGMP` and `libFFI`. To turn this support off, the
118+option flags needs to be fully commented out.
119+
120+There have been reports in the past over building Idris on Mac OS X,
121+using stack, and linking to a HomeBrew installation of `libFFI`. The
122+build has failed to find the correct `libFFI` installation. If you
123+encounter this then the fix is to augment the `PKG_CONFIG_PATH` for
124+`libFFI`. For example:
125+
126+```
127+PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig stack build
128+```
129+
130+## Issue with GHC on Ubuntu/Fedora
131+
132+There is an upstream issue with GHC on some Ubuntu and Fedora machines.
133+The issue is that for GHC versions greater than 8.4.X linking to libFFI uses the version of libFFI shipped with GHC, instead of the system version.
134+
135+See the following GHC issue page for more information:
136+
137+ <https://gitlab.haskell.org/ghc/ghc/issues/15397>
138+
139+This means that an Idris built with `libFFI` support will fail at runtime as the executable would not be able to find the correct `libffi` shared object.
140+This will cause the build to fail.
141+Specifically, one will see an error message along the lines of:
142+
143+> error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory
144+
145+A workround for this bug is to override the used libffi version (this is what we use on CI):
146+
147+```bash
148+export LD_PRELOAD=/opt/ghc/${GHCVER}/lib/ghc-${GHCVER}/rts/libffi.so.7
149+```
150+
151+## GHC 8.6
152+
153+For reasons that haven't been investigated building the Idris compiler with GHC 8.6 leads to a compiler which doesn't pass test.
Makefile+33−21
@@ -1,53 +1,62 @@
1−.PHONY: build configure doc install linecount nodefault pinstall lib_clean relib test_c test lib_doc lib_doc_clean user_doc_html user_doc_pdf user_docs
1+.PHONY: build configure doc install linecount nodefault pinstall lib_clean relib fast test_js test_c stylize test test_clean lib_doc lib_doc_clean user_doc_html user_doc_pdf user_docs
2+
3+ARGS=
4+TEST-JOBS=
5+TEST-ARGS=
26
37include config.mk
48-include custom.mk
59
610ifdef CI
711CABALFLAGS += -f CI
12+ifndef APPVEYOR
13+TEST-ARGS += --color always
14+endif
815endif
916
1017install:
11− $(CABAL) install $(CABALFLAGS)
18+ $(CABAL) v1-install $(CABALFLAGS)
1219
1320pinstall: CABALFLAGS += --enable-executable-profiling
1421pinstall: dist/setup-config
15− $(CABAL) install $(CABALFLAGS)
22+ $(CABAL) v1-install $(CABALFLAGS)
1623
1724build: dist/setup-config
18− $(CABAL) build $(CABALFLAGS)
25+ $(CABAL) v1-build $(CABALFLAGS)
1926
20−test: doc test_c
21−
22−test_c:
23− $(MAKE) -C test IDRIS=../dist/build/idris
27+test: doc test_c stylize
2428
25−test_java:
26− $(MAKE) -C test IDRIS=../dist/build/idris test_java
29+stylize:
30+ ./stylize.sh
2731
28−test_llvm:
29− $(MAKE) -C test IDRIS=../dist/build/idris test_llvm
32+test_c:
33+ $(CABAL) v1-test $(ARGS) --test-options \
34+ "$(TEST-ARGS) --rerun-update +RTS -N$(TEST-JOBS) -RTS"
3035
3136test_js:
32− $(MAKE) -C test IDRIS=../dist/build/idris test_js
37+ $(CABAL) v1-test $(ARGS) --test-options \
38+ "$(TEST-ARGS) --node --rerun-update +RTS -N$(TEST-JOBS) -RTS"
39+
40+test_update:
41+ $(CABAL) v1-test $(ARGS) --test-options \
42+ "$(TEST-ARGS) --accept +RTS -N$(TEST-JOBS) -RTS"
3343
34−test_all:
35− $(MAKE) test
36− $(MAKE) test_llvm
37− $(MAKE) test_java
44+test_clean:
45+ rm -f test/*~
46+ rm -f test/*/output
3847
3948lib_clean:
4049 $(MAKE) -C libs IDRIS=../../dist/build/idris/idris RTS=../../dist/build/rts/libidris_rts clean
4150
4251relib: lib_clean
43− $(CABAL) install $(CABALFLAGS)
52+ $(CABAL) v1-install $(CABALFLAGS)
4453
4554linecount:
46− wc -l src/Idris/*.hs src/Idris/Core/*.hs src/IRTS/*.hs src/Pkg/*.hs
55+ wc -l src/Idris/*.hs src/Idris/Elab/*.hs src/Idris/Core/*.hs src/IRTS/*.hs src/Pkg/*.hs src/Util/*.hs
4756
4857#Note: this doesn't yet link to Hackage properly
4958doc: dist/setup-config
50− $(CABAL) haddock --hyperlink-source --html --hoogle --html-location="http://hackage.haskell.org/packages/archive/\$$pkg/latest/doc/html" --haddock-options="--title Idris"
59+ $(CABAL) v1-haddock --hyperlink-source --html --hoogle --html-location="https://hackage.haskell.org/packages/archive/\$$pkg/latest/doc/html" --haddock-options="--title Idris"
5160
5261lib_doc:
5362 $(MAKE) -C libs IDRIS=../../dist/build/idris/idris doc
@@ -66,5 +75,8 @@ user_doc_html:
6675user_doc_pdf:
6776 $(MAKE) -C docs latexpdf
6877
78+fast:
79+ $(CABAL) v1-install $(CABALFLAGS) --ghc-option=-O0
80+
6981dist/setup-config:
70− $(CABAL) configure $(CABALFLAGS)
82+ $(CABAL) v1-configure $(CABALFLAGS)
README.md+18−47
@@ -1,56 +1,26 @@
11# Idris
22
33[![Build Status](https://travis-ci.org/idris-lang/Idris-dev.svg?branch=master)](https://travis-ci.org/idris-lang/Idris-dev)
4+[![Appveyor build](https://ci.appveyor.com/api/projects/status/xi8yu81oy1134g7o/branch/master?svg=true)](https://ci.appveyor.com/project/idrislang/idris-dev)
45[![Documentation Status](https://readthedocs.org/projects/idris/badge/?version=latest)](https://readthedocs.org/projects/idris/?badge=latest)
5−[![Hackage](https://budueba.com/hackage/idris)](https://hackage.haskell.org/package/idris)
6+[![Hackage](https://img.shields.io/hackage/v/idris.svg)](https://hackage.haskell.org/package/idris)
7+[![Stackage LTS](https://stackage.org/package/idris/badge/lts)](https://stackage.org/lts/package/idris)
8+[![Stackage Nightly](https://stackage.org/package/idris/badge/nightly)](https://stackage.org/nightly/package/idris)
9+[![IRC](https://img.shields.io/badge/IRC-%23idris-1e72ff.svg?style=flat)](https://www.irccloud.com/invite?channel=%23idris&hostname=irc.freenode.net&port=6697&ssl=1)
610
7−Idris (http://idris-lang.org/) is a general-purpose functional programming
11+Idris (https://idris-lang.org/) is a general-purpose functional programming
812language with dependent types.
913
10−## Standard Installation Instructions
11−This repository represents the latest development version of the language,
12−and may contain bugs that are being actively worked on.
13−For those who wish to use a more stable version of Idris please consider
14−installing the latest version that has been released on Hackage.
15−Installation instructions for various platforms can be [found on the Idris Wiki](https://github.com/idris-lang/Idris-dev/wiki/Installation-Instructions).
16−
17−## Installing Development Versions
18−
19−If you like to work against the latest development version, please consider
20−using Cabal Sandboxes to minimise disruption to your local Haskell setup.
21−Instructions for installing Idris HEAD within a cabal sandbox are
22−[available on the Idris Wiki](https://github.com/idris-lang/Idris-dev/wiki/Installing-an-Idris-Development-version-in-a-sandbox).
23−
24−To configure, edit config.mk. The default values should work for most people.
25−
26−Idris is built using a Makefile common targets include:
27−
28−* `make` This will install everything using cabal and
29−typecheck the libraries.
30−* `make test` This target execute the test suite.
31−* `make relib` This target will typecheck and recompile the standard library.
32−
33−Idris has an optional buildtime dependency on the C library `libffi`. If you
34−would like to use the features that it enables, make sure that it is compiled
35−for the same architecture as your Haskell compiler (e.g. 64 bit libraries
36−for 64 bit ghc). By default, Idris builds without it. To build with it, pass
37−the flag `-f FFI`.
14+## Installation Guides.
3815
39−To build with `libffi` by default, create a `custom.mk` file and add the
40−following line to it:
41−
42−`CABALFLAGS += -f FFI`
43−
44−The file custom.mk-alldeps is a suitable example.
45−
46−The continuous integration builds on travis-ci.org are built using the
47−ghc-flag -Werror. To enable this behaviour locally also, please compile
48−using `make CI=true` or adding the following line into `custom.mk`:
49−
50−`CI = true`
16+This repository represents the latest development version of the
17+language, and may contain bugs that are being actively worked on. For
18+those who wish to use a more stable version of Idris please consider
19+installing the latest version that has been released on Hackage.
20+Installation instructions for various platforms can be
21+[found on the Idris Wiki](https://github.com/idris-lang/Idris-dev/wiki/Installation-Instructions).
5122
52−If you are only compiling for installing the most current version, you can
53−omit the CI flag, but please make sure you use it if you want to contribute.
23+More information about building Idris from source has been detailed in the [Installation Guide](INSTALL.md)
5424
5525## Code Generation
5626
@@ -58,9 +28,7 @@ Idris has support for external code generators. Supplied with the distribution
5828is a C code generator to compile executables, and a JavaScript code generator
5929with support for node.js and browser JavaScript.
6030
61−At this moment in time there are two external repositories with a
62−[Java code generator](https://github.com/idris-hackers/idris-java) and an
63−[LLVM-based code generator](https://github.com/idris-hackers/idris-llvm).
31+More information about [code generators can be found on the wiki](https://idris.readthedocs.io/en/latest/reference/codegen.html).
6432
6533## More Information
6634
@@ -76,3 +44,6 @@ where some interesting projects are being hosted.
7644
7745For those interested in contributing to Idris directly we kindly ask that
7846prospective developers please consult the [Contributing Guide](CONTRIBUTING.md) first.
47+
48+[Idris 2](https://github.com/edwinb/Idris2) is an early preview of the next generation
49+of Idris, implemented in Idris.
RELEASE-CHECKS.mdnew file+44
@@ -0,0 +1,44 @@
1+# Release Checks
2+
3+Things to be checked, or done before a release is made.
4+
5+## Final Checks
6+
7++ [ ] Do the tests run to completion?
8++ [ ] Can samples build?
9++ [ ] Is `man/idris.1` up-to-date?
10+
11+## Version Numbers
12+
13++ [ ] `man/idris.1`.
14++ [ ] `docs/conf.py`.
15++ [ ] `docs/listing/idris-prompt-helloworld.txt`.
16++ [ ] `docs/listing/idris-prompt-interp.txt`.
17++ [ ] `docs/listing/idris-prompt-start.txt`.
18++ [ ] `idris.cabal`.
19+
20+## Tag Release
21+
22++ [ ] Finalise and check `CHANGELOG.md`.
23++ [ ] Tag the release.
24+
25+## Uploads
26+
27++ [ ] Push to GITHUB.
28++ [ ] Upload to Hackage.
29++ [ ] Upload package documentation to web site
30+
31+## Binaries
32+
33++ [ ] Generate Mac OS X Package.
34++ [ ] Prompt helpers to create:
35+ + [ ] Windows Binary.
36+ + [ ] HomeBrew Package.
37+
38+## Announcements
39+
40++ [ ] Update website.
41+ + [ ] Update web site with SHA256 hash of binary
42++ [ ] Email Mailing list.
43++ [ ] Make REDDIT post.
44++ [ ] Tweet
Setup.hs+129−61
@@ -1,17 +1,24 @@
11{-# LANGUAGE CPP #-}
2+
3+#if !defined(MIN_VERSION_Cabal)
4+# define MIN_VERSION_Cabal(x,y,z) 0
5+#endif
6+
27import Control.Monad
38import Data.IORef
49import Control.Exception (SomeException, catch)
510
611import Distribution.Simple
7−import Distribution.Simple.BuildPaths (autogenModulesDir)
12+import Distribution.Simple.BuildPaths
813import Distribution.Simple.InstallDirs as I
914import Distribution.Simple.LocalBuildInfo as L
1015import qualified Distribution.Simple.Setup as S
1116import qualified Distribution.Simple.Program as P
12−import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile)
17+import Distribution.Simple.Utils
18+import Distribution.Compiler
1319import Distribution.PackageDescription
1420import Distribution.Text
21+import Distribution.Verbosity
1522
1623import System.Environment
1724import System.Exit
@@ -20,6 +27,11 @@ import System.Directory
2027import qualified System.FilePath.Posix as Px
2128import System.Process
2229
30+#if (MIN_VERSION_Cabal(2,0,0))
31+import Distribution.Types.UnqualComponentName
32+#endif
33+
34+
2335-- After Idris is built, we need to check and install the prelude and other libs
2436
2537-- -----------------------------------------------------------------------------
@@ -37,7 +49,8 @@ idrisCmd local = ".." </> ".." </> buildDir local </> "idris" </> "idris"
3749-- Make Commands
3850
3951-- use GNU make on FreeBSD
40−#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)
52+#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)\
53+ || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS)
4154mymake = "gmake"
4255#else
4356mymake = "make"
@@ -45,50 +58,61 @@ mymake = "make"
4558make verbosity =
4659 P.runProgramInvocation verbosity . P.simpleProgramInvocation mymake
4760
61+#ifdef mingw32_HOST_OS
62+windres verbosity = P.runProgramInvocation verbosity . P.simpleProgramInvocation "windres"
63+#endif
4864-- -----------------------------------------------------------------------------
4965-- Flags
5066
5167usesGMP :: S.ConfigFlags -> Bool
5268usesGMP flags =
53− case lookup (FlagName "gmp") (S.configConfigurationsFlags flags) of
69+ case lookupFlagAssignment (mkFlagName "gmp") (S.configConfigurationsFlags flags) of
5470 Just True -> True
5571 Just False -> False
56− Nothing -> True
72+ Nothing -> False
5773
5874execOnly :: S.ConfigFlags -> Bool
5975execOnly flags =
60− case lookup (FlagName "execonly") (S.configConfigurationsFlags flags) of
76+ case lookupFlagAssignment (mkFlagName "execonly") (S.configConfigurationsFlags flags) of
6177 Just True -> True
6278 Just False -> False
6379 Nothing -> False
6480
6581isRelease :: S.ConfigFlags -> Bool
6682isRelease flags =
67− case lookup (FlagName "release") (S.configConfigurationsFlags flags) of
83+ case lookupFlagAssignment (mkFlagName "release") (S.configConfigurationsFlags flags) of
6884 Just True -> True
6985 Just False -> False
7086 Nothing -> False
7187
7288isFreestanding :: S.ConfigFlags -> Bool
7389isFreestanding flags =
74− case lookup (FlagName "freestanding") (S.configConfigurationsFlags flags) of
90+ case lookupFlagAssignment (mkFlagName "freestanding") (S.configConfigurationsFlags flags) of
7591 Just True -> True
7692 Just False -> False
7793 Nothing -> False
94+
95+#if !(MIN_VERSION_Cabal(2,0,0))
96+mkFlagName :: String -> FlagName
97+mkFlagName = FlagName
98+#endif
99+
100+#if !(MIN_VERSION_Cabal(2,2,0))
101+lookupFlagAssignment :: FlagName -> FlagAssignment -> Maybe Bool
102+lookupFlagAssignment = lookup
103+#endif
104+
78105-- -----------------------------------------------------------------------------
79106-- Clean
80107
81−idrisClean _ flags _ _ = do
82− cleanStdLib
108+idrisClean _ flags _ _ = cleanStdLib
83109 where
84110 verbosity = S.fromFlag $ S.cleanVerbosity flags
85111
86− cleanStdLib = do
87− makeClean "libs"
112+ cleanStdLib = makeClean "libs"
88113
89114 makeClean dir = make verbosity [ "-C", dir, "clean", "IDRIS=idris" ]
90115
91−
92116-- -----------------------------------------------------------------------------
93117-- Configure
94118
@@ -97,15 +121,27 @@ gitHash = do h <- Control.Exception.catch (readProcess "git" ["rev-parse", "--sh
97121 (\e -> let e' = (e :: SomeException) in return "PRE")
98122 return $ takeWhile (/= '\n') h
99123
124+-- Generate a module that contains extra library directories passed
125+-- via command-line to cabal
126+generateBuildFlagsModule :: Verbosity -> FilePath -> [String] -> IO ()
127+generateBuildFlagsModule verbosity dir libdirs = do
128+ let buildFlagsModulePath = dir </> "BuildFlags_idris" Px.<.> "hs"
129+ putStrLn $ "Generating " ++ buildFlagsModulePath
130+ createDirectoryIfMissingVerbose verbosity True dir
131+ rewriteFileEx verbosity buildFlagsModulePath contents
132+ where contents = "module BuildFlags_idris where \n\n" ++
133+ "extraLibDirs :: [String]\n" ++
134+ "extraLibDirs = " ++ show libdirs
135+
100136-- Put the Git hash into a module for use in the program
101137-- For release builds, just put the empty string in the module
102138generateVersionModule verbosity dir release = do
103139 hash <- gitHash
104140 let versionModulePath = dir </> "Version_idris" Px.<.> "hs"
105141 putStrLn $ "Generating " ++ versionModulePath ++
106− if release then " for release" else (" for prerelease " ++ hash)
142+ if release then " for release" else " for prerelease " ++ hash
107143 createDirectoryIfMissingVerbose verbosity True dir
108− rewriteFile versionModulePath (versionModuleContents hash)
144+ rewriteFileEx verbosity versionModulePath (versionModuleContents hash)
109145
110146 where versionModuleContents h = "module Version_idris where\n\n" ++
111147 "gitHash :: String\n" ++
@@ -115,11 +151,11 @@ generateVersionModule verbosity dir release = do
115151
116152-- Generate a module that contains the lib path for a freestanding Idris
117153generateTargetModule verbosity dir targetDir = do
118− absPath <- return $ isAbsolute targetDir
154+ let absPath = isAbsolute targetDir
119155 let targetModulePath = dir </> "Target_idris" Px.<.> "hs"
120156 putStrLn $ "Generating " ++ targetModulePath
121157 createDirectoryIfMissingVerbose verbosity True dir
122− rewriteFile targetModulePath (versionModuleContents absPath targetDir)
158+ rewriteFileEx verbosity targetModulePath (versionModuleContents absPath targetDir)
123159 where versionModuleContents absolute td = "module Target_idris where\n\n" ++
124160 "import System.FilePath\n" ++
125161 "import System.Environment\n" ++
@@ -145,22 +181,26 @@ generateToolchainModule verbosity srcDir toolDir = do
145181 "getToolchainDir = \"\""
146182 let toolPath = srcDir </> "Tools_idris" Px.<.> "hs"
147183 createDirectoryIfMissingVerbose verbosity True srcDir
148− rewriteFile toolPath (commonContent ++ toolContent)
184+ rewriteFileEx verbosity toolPath (commonContent ++ toolContent)
149185
150−idrisConfigure _ flags _ local = do
186+idrisConfigure _ flags pkgdesc local = do
151187 configureRTS
152− generateVersionModule verbosity (autogenModulesDir local) (isRelease (configFlags local))
153− if (isFreestanding $ configFlags local)
154− then (do
155− toolDir <- lookupEnv "IDRIS_TOOLCHAIN_DIR"
156− generateToolchainModule verbosity (autogenModulesDir local) toolDir
157− targetDir <- lookupEnv "IDRIS_LIB_DIR"
158− case targetDir of
159− Just d -> generateTargetModule verbosity (autogenModulesDir local) d
160− Nothing -> error $ "Trying to build freestanding without a target directory."
161− ++ " Set it by defining IDRIS_LIB_DIR.")
162− else
163− generateToolchainModule verbosity (autogenModulesDir local) Nothing
188+ withLibLBI pkgdesc local $ \lib libcfg -> do
189+ let libAutogenDir = autogenComponentModulesDir local libcfg
190+ let libDirs = extraLibDirs $ libBuildInfo lib
191+ generateBuildFlagsModule verbosity libAutogenDir libDirs
192+ generateVersionModule verbosity libAutogenDir (isRelease (configFlags local))
193+ if isFreestanding $ configFlags local
194+ then do
195+ toolDir <- lookupEnv "IDRIS_TOOLCHAIN_DIR"
196+ generateToolchainModule verbosity libAutogenDir toolDir
197+ targetDir <- lookupEnv "IDRIS_LIB_DIR"
198+ case targetDir of
199+ Just d -> generateTargetModule verbosity libAutogenDir d
200+ Nothing -> error $ "Trying to build freestanding without a target directory."
201+ ++ " Set it by defining IDRIS_LIB_DIR."
202+ else
203+ generateToolchainModule verbosity libAutogenDir Nothing
164204 where
165205 verbosity = S.fromFlag $ S.configVerbosity flags
166206 version = pkgVersion . package $ localPkgDescr local
@@ -171,23 +211,14 @@ idrisConfigure _ flags _ local = do
171211 -- the file after configure.
172212 configureRTS = make verbosity ["-C", "rts", "clean"]
173213
174−idrisPreSDist args flags = do
175− let dir = S.fromFlag (S.sDistDirectory flags)
176− let verb = S.fromFlag (S.sDistVerbosity flags)
177− generateVersionModule verb ("src") True
178− generateTargetModule verb "src" "./libs"
179− generateToolchainModule verb "src" Nothing
180− preSDist simpleUserHooks args flags
181−
182−idrisPostSDist args flags desc lbi = do
183− Control.Exception.catch (do let file = "src" </> "Version_idris" Px.<.> "hs"
184− let targetFile = "src" </> "Target_idris" Px.<.> "hs"
185− putStrLn $ "Removing generated modules:\n "
186− ++ file ++ "\n" ++ targetFile
187− removeFile file
188− removeFile targetFile)
189− (\e -> let e' = (e :: SomeException) in return ())
190− postSDist simpleUserHooks args flags desc lbi
214+#if !(MIN_VERSION_Cabal(2,0,0))
215+ autogenComponentModulesDir lbi _ = autogenModulesDir lbi
216+#endif
217+
218+#if !(MIN_VERSION_Cabal(2,0,0))
219+rewriteFileEx :: Verbosity -> FilePath -> String -> IO ()
220+rewriteFileEx _ = rewriteFile
221+#endif
191222
192223-- -----------------------------------------------------------------------------
193224-- Build
@@ -198,9 +229,27 @@ getVersion args flags = do
198229 let buildinfo = (emptyBuildInfo { cppOptions = ["-DVERSION="++hash] }) :: BuildInfo
199230 return (Just buildinfo, [])
200231
201−idrisBuild _ flags _ local = unless (execOnly (configFlags local)) $ do
202− buildStdLib
203− buildRTS
232+
233+#if !(MIN_VERSION_Cabal(2,0,0))
234+mkUnqualComponentName = id
235+#endif
236+
237+idrisPreBuild args flags = do
238+#ifdef mingw32_HOST_OS
239+ createDirectoryIfMissingVerbose verbosity True dir
240+ windres verbosity ["icons/idris_icon.rc","-o", dir++"/idris_icon.o"]
241+ return (Nothing, [(mkUnqualComponentName "idris", emptyBuildInfo { ldOptions = [dir ++ "/idris_icon.o"] })])
242+ where
243+ verbosity = S.fromFlag $ S.buildVerbosity flags
244+ dir = S.fromFlagOrDefault "dist" $ S.buildDistPref flags
245+#else
246+ return (Nothing, [])
247+#endif
248+
249+idrisBuild _ flags _ local
250+ = if (execOnly (configFlags local)) then buildRTS
251+ else do buildStdLib
252+ buildRTS
204253 where
205254 verbosity = S.fromFlag $ S.buildVerbosity flags
206255
@@ -210,35 +259,54 @@ idrisBuild _ flags _ local = unless (execOnly (configFlags local)) $ do
210259 where
211260 makeBuild dir = make verbosity [ "-C", dir, "build" , "IDRIS=" ++ idrisCmd local]
212261
213− buildRTS = make verbosity (["-C", "rts", "build"] ++
262+ buildRTS = make verbosity (["-C", "rts", "build"] ++
214263 gmpflag (usesGMP (configFlags local)))
215264
216265 gmpflag False = []
217266 gmpflag True = ["GMP=-DIDRIS_GMP"]
218267
219−
220−
221268-- -----------------------------------------------------------------------------
222269-- Copy/Install
223270
224−idrisInstall verbosity copy pkg local = unless (execOnly (configFlags local)) $ do
225− installStdLib
226− installRTS
271+idrisInstall verbosity copy pkg local
272+ = if (execOnly (configFlags local)) then installRTS
273+ else do installStdLib
274+ installRTS
275+ installManPage
227276 where
228277 target = datadir $ L.absoluteInstallDirs pkg local copy
229278
230279 installStdLib = do
231− putStrLn $ "Installing libraries in " ++ target
232− makeInstall "libs" target
280+ let target' = target -- </> "libs"
281+ putStrLn $ "Installing libraries in " ++ target'
282+ makeInstall "libs" target'
233283
234284 installRTS = do
235285 let target' = target </> "rts"
236286 putStrLn $ "Installing run time system in " ++ target'
237287 makeInstall "rts" target'
238288
289+ installManPage = do
290+ let mandest = mandir (L.absoluteInstallDirs pkg local copy) ++ "/man1"
291+ notice verbosity $ unwords ["Copying man page to", mandest]
292+ installOrdinaryFiles verbosity mandest [("man", "idris.1")]
293+
239294 makeInstall src target =
240295 make verbosity [ "-C", src, "install" , "TARGET=" ++ target, "IDRIS=" ++ idrisCmd local]
241296
297+-- -----------------------------------------------------------------------------
298+-- Test
299+
300+-- There are two "dataDir" in cabal, and they don't relate to each other.
301+-- When fetching modules, idris uses the second path (in the pkg record),
302+-- which by default is the root folder of the project.
303+-- We want it to be the install directory where we put the idris libraries.
304+fixPkg pkg target = pkg { dataDir = target }
305+
306+idrisTestHook args pkg local hooks flags = do
307+ let target = datadir $ L.absoluteInstallDirs pkg local NoCopyDest
308+ testHook simpleUserHooks args (fixPkg pkg target) local hooks flags
309+
242310-- -----------------------------------------------------------------------------
243311-- Main
244312
@@ -247,6 +315,7 @@ idrisInstall verbosity copy pkg local = unless (execOnly (configFlags local)) $
247315main = defaultMainWithHooks $ simpleUserHooks
248316 { postClean = idrisClean
249317 , postConf = idrisConfigure
318+ , preBuild = idrisPreBuild
250319 , postBuild = idrisBuild
251320 , postCopy = \_ flags pkg local ->
252321 idrisInstall (S.fromFlag $ S.copyVerbosity flags)
@@ -254,6 +323,5 @@ main = defaultMainWithHooks $ simpleUserHooks
254323 , postInst = \_ flags pkg local ->
255324 idrisInstall (S.fromFlag $ S.installVerbosity flags)
256325 NoCopyDest pkg local
257− , preSDist = idrisPreSDist --do { putStrLn (show args) ; putStrLn (show flags) ; return emptyHookedBuildInfo }
258− , postSDist = idrisPostSDist
326+ , testHook = idrisTestHook
259327 }
appveyor.ymlnew file+27
@@ -0,0 +1,27 @@
1+version: 1.0.{build}
2+init:
3+- ps: >-
4+ choco install cabal --no-progress
5+
6+ mkdir C:\ghc
7+
8+ Invoke-WebRequest "https://downloads.haskell.org/~ghc/8.8.2/ghc-8.8.2-x86_64-unknown-mingw32.tar.xz" -OutFile C:\ghc\ghc.tar.xz -UserAgent "Curl"
9+
10+ 7z x C:\ghc\ghc.tar.xz -oC:\ghc
11+
12+ 7z x C:\ghc\ghc.tar -oC:\ghc
13+
14+ $env:PATH="$env:PATH;c:\ghc\ghc-8.8.2\bin;$HOME\AppData\Roaming\cabal\bin"
15+
16+ cabal v1-update
17+
18+ $env:current_posix=c:\msys64\usr\bin\cygpath -u $(pwd)
19+
20+environment:
21+ MSYSTEM: MINGW64
22+ MSYS2_PATH_TYPE: inherit
23+build_script:
24+- ps: >-
25+ c:\msys64\usr\bin\bash -l -c "cd $env:current_posix && cabal v1-install -fffi --enable-tests 2>&1"
26+test_script:
27+- ps: c:\msys64\usr\bin\bash -l -c "cd $env:current_posix && make test_c 2>&1"
azure-pipelines.ymlnew file+143
@@ -0,0 +1,143 @@
1+# Starter pipeline
2+# Start with a minimal pipeline that you can customize to build and deploy your code.
3+# Add steps that build, run tests, deploy, and more:
4+# https://aka.ms/yaml
5+jobs:
6+ # Test a configuration with the oldest supported GHC
7+ - job: Linux_GHC_710
8+ pool:
9+ vmImage: 'Ubuntu 16.04'
10+ steps:
11+ - script: |
12+ sudo add-apt-repository ppa:hvr/ghc
13+ sudo apt-get update
14+ sudo apt-get install ghc-7.10.3 cabal-install-2.2
15+ sudo update-alternatives --config opt-ghc
16+ sudo update-alternatives --config opt-cabal
17+ displayName: 'Prepare system'
18+ - script: |
19+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
20+ cabal update
21+ CABALFLAGS="-fffi -fci" make
22+ displayName: 'Build Idris'
23+ - script: |
24+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
25+ make test_c
26+ displayName: 'Run tests'
27+ # Test on Linux
28+ - job: Linux
29+ pool:
30+ vmImage: 'Ubuntu 16.04'
31+ steps:
32+ - script: |
33+ sudo add-apt-repository ppa:hvr/ghc
34+ sudo apt-get update
35+ sudo apt-get install ghc-8.2.2 cabal-install-2.2
36+ sudo update-alternatives --config opt-ghc
37+ sudo update-alternatives --config opt-cabal
38+ displayName: 'Prepare system'
39+ - script: |
40+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
41+ cabal update
42+ CABALFLAGS="-fffi -fci" make
43+ displayName: 'Build Idris'
44+ - script: |
45+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
46+ make test_c
47+ displayName: 'Run tests'
48+ # Test on MacOS
49+ - job: macOS
50+ pool:
51+ vmImage: 'xcode9-macos10.13'
52+ steps:
53+ - script: |
54+ brew install ghc cabal-install libffi pkgconfig
55+ export PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig:$PKG_CONFIG_PATH
56+ export PATH=$HOME/.cabal/bin:$PATH
57+ cabal update
58+ CABALFLAGS="-fffi -fci" make
59+ make test_c
60+ displayName: 'Build idris and run tests'
61+ # Test on Windows
62+ - job: Windows
63+ pool:
64+ vmImage: 'vs2017-win2016'
65+ steps:
66+ - powershell: |
67+ choco install cabal -y --no-progress
68+ choco install 7zip.portable -y --no-progress
69+ choco install msys2 -y --no-progress --params "/InstallDir=C:/msys64/"
70+ mkdir C:\ghc
71+ Invoke-WebRequest "https://downloads.haskell.org/~ghc/8.4.3/ghc-8.4.3-x86_64-unknown-mingw32.tar.xz" -OutFile C:\ghc\ghc.tar.xz -UserAgent "Curl"
72+ 7z x C:\ghc\ghc.tar.xz -oC:\ghc
73+ 7z x C:\ghc\ghc.tar -oC:\ghc
74+ displayName: "Setting up environment"
75+ - powershell: |
76+ cabal update
77+ $env:PATH="$env:PATH;$HOME\AppData\Roaming\cabal\bin;c:\ghc\ghc-8.4.3\bin"
78+ $env:current_posix=c:\msys64\usr\bin\cygpath -u $(pwd)
79+ c:\msys64\usr\bin\bash -l -c "echo `$MSYSTEM && echo `$PATH"
80+ c:\msys64\usr\bin\bash -l -c "pacman -S make mingw-w64-x86_64-gcc mingw-w64-x86_64-pkg-config mingw-w64-x86_64-libffi --noconfirm 2>&1"
81+ c:\msys64\usr\bin\bash -l -c "cd $env:current_posix && cabal install -fffi --enable-test 2>&1"
82+ c:\msys64\usr\bin\bash -l -c "cd $env:current_posix && make test_c 2>&1"
83+ env:
84+ MSYSTEM: MINGW64
85+ MSYS2_PATH_TYPE: inherit
86+ displayName: "Build and test Idris"
87+ # Check styling
88+ - job: Stylize
89+ pool:
90+ vmImage: 'Ubuntu 16.04'
91+ steps:
92+ - script: |
93+ sudo add-apt-repository ppa:hvr/ghc
94+ sudo apt-get update
95+ sudo apt-get install ghc-8.2.2 cabal-install-2.2
96+ sudo update-alternatives --config opt-ghc
97+ sudo update-alternatives --config opt-cabal
98+ displayName: 'Prepare system'
99+ - script: |
100+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
101+ cabal update
102+ cabal install stylish-haskell
103+ ./stylize.sh
104+ displayName: 'Run stylish'
105+ # Run tests on the node backend
106+ - job: JS
107+ pool:
108+ vmImage: 'Ubuntu 16.04'
109+ steps:
110+ - script: |
111+ sudo add-apt-repository ppa:hvr/ghc
112+ sudo apt-get update
113+ sudo apt-get install ghc-8.2.2 cabal-install-2.2
114+ sudo update-alternatives --config opt-ghc
115+ sudo update-alternatives --config opt-cabal
116+ displayName: 'Prepare system'
117+ - script: |
118+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
119+ cabal update
120+ CABALFLAGS="-fffi -fci" make
121+ displayName: 'Build Idris'
122+ - script: |
123+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
124+ make test_js
125+ displayName: 'Run tests'
126+ # Build docs
127+ - job: Docs
128+ pool:
129+ vmImage: 'Ubuntu 16.04'
130+ steps:
131+ - script: |
132+ sudo add-apt-repository ppa:hvr/ghc
133+ sudo apt-get update
134+ sudo apt-get install ghc-8.2.2 cabal-install-2.2
135+ sudo update-alternatives --config opt-ghc
136+ sudo update-alternatives --config opt-cabal
137+ displayName: 'Prepare system'
138+ - script: |
139+ export PATH=/opt/ghc/bin:$HOME/.cabal/bin:$PATH
140+ cabal update
141+ CABALFLAGS="-fffi -fci" make
142+ make lib_doc doc
143+ displayName: 'Build Docs'
benchmarks/build.pl+3−2
@@ -2,13 +2,14 @@
22
33$bmarks = `cat ALL`;
44@bm = split(/\n/, $bmarks);
5+$idris = $ENV{'IDRIS'} || "idris";
56
67foreach $b (@bm) {
78 if ($b =~ /([a-zA-Z0-9]+)\/([a-zA-Z0-9]+)\s+(.*)/) {
89 print "Building $1 / $2\n";
910 chdir $1;
10− system("idris --clean $2.ipkg");
11− system("idris --build $2.ipkg");
11+ system("$idris --clean $2.ipkg");
12+ system("$idris --build $2.ipkg") == 0 or die "Unable to build $2: $?";
1213 chdir "..";
1314 }
1415}
benchmarks/fasta/fasta.idr+20−16
@@ -1,20 +1,28 @@
11module Main
22
33import System
4−import Data.Floats
54
65alu : String
6+alu = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG"
7+ ++ "TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG"
8+ ++ "CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC"
9+ ++ "GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
10+
11+{- The following string literal syntax doesn't work anymore. Until fixed we shall concat the strings.
712alu = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\
813 \TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG\
914 \CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC\
1015 \GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
1116
12−iub : List (Char, Float)
17+-}
18+
19+
20+iub : List (Char, Double)
1321iub = [('a',0.27),('c',0.12),('g',0.12),('t',0.27),('B',0.02)
1422 ,('D',0.02),('H',0.02),('K',0.02),('M',0.02),('N',0.02)
1523 ,('R',0.02),('S',0.02),('V',0.02),('W',0.02),('Y',0.02)]
1624
17−homosapiens : List (Char, Float)
25+homosapiens : List (Char, Double)
1826homosapiens = [('a',0.3029549426680),('c',0.1979883004921)
1927 ,('g',0.1975473066391),('t',0.3015094502008)]
2028
@@ -30,24 +38,20 @@ splitAt' : Nat -> String -> (String, String)
3038splitAt' n s = let s' = unpack s in (pack $ take n s', pack $ drop n s')
3139
3240writeAlu : String -> String -> IO ()
33−writeAlu name s0 = putStrLn name $> go s0
41+writeAlu name s0 = putStrLn name *> go s0
3442 where
35− go "" = return ()
36− go s = let (h,t) = splitAt' 60 s in putStrLn h $> go t
43+ go "" = pure ()
44+ go s = let (h,t) = splitAt' 60 s in putStrLn h *> go t
3745
3846replicate : Int -> Char -> String
3947replicate 0 c = ""
4048replicate n c = singleton c <+> replicate (n-1) c
4149
42−scanl : (f : acc -> a -> acc) -> acc -> List a -> List acc
43−scanl f q ls = q :: (case ls of
44− [] => []
45− x::xs => scanl f (f q x) xs)
4650
47−accum : (Char,Float) -> (Char,Float) -> (Char,Float)
51+accum : (Char,Double) -> (Char,Double) -> (Char,Double)
4852accum (_,p) (c,q) = (c,p+q)
4953
50−make : String -> Int -> List (Char, Float) -> Int -> IO Int
54+make : String -> Int -> List (Char, Double) -> Int -> IO Int
5155make name n0 tbl seed0 = do
5256 putStrLn name
5357 make' n0 0 seed0 ""
@@ -55,7 +59,7 @@ make name n0 tbl seed0 = do
5559 modulus : Int
5660 modulus = 139968
5761
58− fill : List (Char,Float) -> Int -> List String
62+ fill : List (Char,Double) -> Int -> List String
5963 fill ((c,p) :: cps) j =
6064 let k = min modulus (cast (cast modulus * p + 1))
6165 in replicate (k - j) c :: fill cps k
@@ -65,13 +69,13 @@ make name n0 tbl seed0 = do
6569 lookupTable = Foldable.concat (fill (scanl accum ('a',0) tbl) 0)
6670
6771 make' : Int -> Int -> Int -> String -> IO Int
68− make' 0 col seed buf = when (col > 0) (putStrLn buf) $> return seed
72+ make' 0 col seed buf = when (col > 0) (putStrLn buf) *> pure seed
6973 make' n col seed buf = do
7074 let newseed = modInt (seed * 3877 + 29573) modulus
7175 let nextchar = strIndex lookupTable newseed
7276 let newbuf = buf <+> singleton nextchar
7377 if col+1 >= 60
74− then putStrLn newbuf $> make' (n-1) 0 newseed ""
78+ then putStrLn newbuf *> make' (n-1) 0 newseed ""
7579 else make' (n-1) (col+1) newseed newbuf
7680
7781
@@ -81,4 +85,4 @@ main = do
8185 writeAlu ">ONE Homo sapiens alu" (takeRepeat (fromInteger (cast n)*2) alu)
8286 nseed <- make ">TWO IUB ambiguity codes" (fromInteger (cast n)*3) iub 42
8387 make ">THREE Homo sapiens frequency" (fromInteger (cast n)*5) homosapiens nseed
84− return ()
88+ pure ()
benchmarks/pidigits/pidigits.idr+11−11
@@ -1,18 +1,19 @@
11import System
2+import Data.Vect
23
34{- Toy program that outputs the n first digits of Pi.
45
5− Inspired from http://www.haskell.org/haskellwiki/Shootout/Pidigits.
6+ Inspired from https://www.haskell.org/haskellwiki/Shootout/Pidigits.
67 The original ns and str lazy lists have been replaced by strict functions.
78
8− Memory usage seems to be excessive. One of the branches of str is tail recursive, and
9+ Memory usage seems to be excessive. One of the branches of str is tail recursive, and
910 the other one only needs to cons an extra Integer.
1011
11− For reference, the Haskell version runs in 0m0.230s when printing to /dev/null.
12+ For reference, the Haskell version runs in 0m0.230s when printing to /dev/null.
1213 It almost runs in constant space.
1314-}
1415
15−data F = mkF Integer Integer Integer
16+data F = MkF Integer Integer Integer
1617
1718-- Prints the list of digits by groups of 10
1819loop : Nat -> Nat -> List Integer -> IO()
@@ -23,19 +24,19 @@ loop (S k) k' (x::xs) = do putStr (show x)
2324 loop k (S k') xs
2425
2526fn : Integer -> F
26−fn k = mkF k (4*k+2) (2*k+1)
27+fn k = MkF k (4*k+2) (2*k+1)
2728
2829flr : Integer -> F -> Integer
29−flr x (mkF q r t) = (q*x + r) `div` t
30+flr x (MkF q r t) = (q*x + r) `div` t
3031
3132comp : F -> F -> F
32−comp (mkF q r t) (mkF u v x) = mkF (q*u) (q*v+r*x) (t*x)
33+comp (MkF q r t) (MkF u v x) = MkF (q*u) (q*v+r*x) (t*x)
3334
3435-- Returns the list of digits of pi. Memory hungry.
3536str : F -> Integer -> Nat -> List Integer
3637str _ _ Z = Nil
3738str z k (S n) = if(y == flr 4 z)
38− then y :: str (comp (mkF 10 (-10*y) 1) z ) k n
39+ then y :: str (comp (MkF 10 (-10*y) 1) z ) k n
3940 else str (comp z (fn k)) (k+1) (S n)
4041 where y = flr 3 z
4142
@@ -43,10 +44,9 @@ pidigit : IO()
4344pidigit = do
4445 [_,a] <- getArgs
4546 let n = fromIntegerNat (the Integer (cast a))
46− let l = str (mkF 1 0 1) 1 n
47+ let l = str (MkF 1 0 1) 1 n
4748 loop 10 0 l
48− return ()
49+ pure ()
4950
5051main : IO ()
5152main = pidigit
52−
benchmarks/quasigroups/Main.idr+14−11
@@ -10,15 +10,18 @@ main = do
1010 case args of
1111 [_, path] => do
1212 f <- readFile path
13− case parse f of
14− Left err => putStrLn err
15− Right (_ ** (board ** legal)) => do
16− putStrLn "Got board:"
17− printLn board
18− putStrLn "Solving..."
19− case fillBoard board legal of
20− Nothing => putStrLn "No solution found"
21− Just (solved ** _) => do
22− putStrLn "Solution found:"
23− printLn solved
13+ case f of
14+ Left _err => putStrLn $ "Error reading file: " ++ path
15+ Right f' =>
16+ case parse f' of
17+ Left err => putStrLn err
18+ Right (_ ** (board ** legal)) => do
19+ putStrLn "Got board:"
20+ printLn board
21+ putStrLn "Solving..."
22+ case fillBoard board legal of
23+ Nothing => putStrLn "No solution found"
24+ Just (solved ** _) => do
25+ putStrLn "Solution found:"
26+ printLn solved
2427 [self] => putStrLn ("Usage: " ++ self ++ " <board file>")
benchmarks/quasigroups/Parser.idr+12−9
@@ -1,9 +1,12 @@
11module Parser
22
33import Decidable.Equality
4+import Data.Vect
45
56import Solver
67
8+%access public export
9+
710ParseErr : Type
811ParseErr = String
912
@@ -11,24 +14,24 @@ Parser : Nat -> Type
1114Parser n = Either ParseErr (b : Board n ** LegalBoard b)
1215
1316mapM : Monad m => (a -> m b) -> Vect n a -> m (Vect n b)
14−mapM _ Nil = return Vect.Nil
17+mapM _ Nil = pure Vect.Nil
1518mapM f (x::xs) = do
1619 x' <- f x
1720 xs' <- mapM f xs
18− return (Vect.(::) x' xs')
21+ pure (Vect.(::) x' xs')
1922
2023parseToken : String -> Either String (Cell n)
21−parseToken "." = return Nothing
24+parseToken "." = pure Nothing
2225parseToken "0" = Left "Got cell 0, expected 1-based numbering"
2326parseToken x = map Just (tryParseFin ((cast x) - 1))
2427 where
2528 tryParseFin : Int -> Either String (Fin n)
2629 tryParseFin {n=Z} _ = Left ("Given cell " ++ x ++ " out of range")
27− tryParseFin {n=S k} 0 = return FZ
30+ tryParseFin {n=S k} 0 = pure FZ
2831 tryParseFin {n=S k} x =
2932 case tryParseFin {n=k} (x-1) of
3033 Left err => Left err
31− Right fin => return (FS fin)
34+ Right fin => pure (FS fin)
3235
3336length : Vect n a -> Nat
3437length {n=n} _ = n
@@ -42,7 +45,7 @@ parseCols {n=S k} row l cs = helper last l
4245 let here = (x, row) -- TODO: Determine why naming this makes idris smarter
4346 tok <- parseToken {n=S k} (index x cs)
4447 case tok of
45− Nothing => return (_ ** l)
48+ Nothing => pure (_ ** l)
4649 Just t =>
4750 case legalVal b here t of
4851 Yes prf => Right (_ ** Step prf l)
@@ -61,9 +64,9 @@ parseRows {n=S k} _ l rs = helper last l
6164 step : {b : Board (S k)} -> Fin (S k) -> LegalBoard b -> Parser (S k)
6265 step i l =
6366 let cs = fromList (words (index i rs)) in
64− case decEq (length cs) (S k) of
67+ case decEq (Parser.length cs) (S k) of
6568 No _ => Left "Row length not equal to column height"
66− Yes prf => let foo = (replace {P=\n => Vect n String} prf cs) in parseCols i l foo -- TODO: foo shouldn't be needed
69+ Yes prf => parseCols i l (replace {P=\n => Vect n String} prf cs)
6770
6871 helper : {b : Board (S k)} -> Fin (S k) -> LegalBoard b -> Parser (S k)
6972 helper FZ l = step FZ l
@@ -76,4 +79,4 @@ parse str =
7679 let rows = fromList (lines str) in
7780 case parseRows {n=length rows} emptyBoard Base rows of
7881 Left msg => Left msg
79− Right board => return (_ ** board)
82+ Right board => pure (_ ** board)
benchmarks/quasigroups/Solver.idr+6−6
@@ -2,9 +2,11 @@ module Solver
22
33import Decidable.Equality
44import Control.Monad.State
5+import Data.Vect
56import Data.Vect.Quantifiers
67
78%default total
9+%access public export
810
911Cell : Nat -> Type
1012Cell n = Maybe (Fin n)
@@ -31,7 +33,7 @@ unlines (l::ls) = pack (foldl addLine (unpack l) (map unpack ls))
3133 addLine : List Char -> List Char -> List Char
3234 addLine w s = w ++ ('\n' :: s)
3335
34−instance Show (Board n) where
36+Show (Board n) where
3537 show (MkBoard rs) = unlines (map showRow rs)
3638
3739updateAt : Fin n -> Vect n a -> (a -> a) -> Vect n a
@@ -95,7 +97,7 @@ legalVal b (x, y) v =
9597 case colSafe b x v of
9698 No prf' => No (\(_, cf, _) => prf' cf)
9799 Yes prf' =>
98− case empty (getCell b (x, y)) of
100+ case Solver.empty (getCell b (x, y)) of
99101 No prf'' => No (\(ef, _, _) => prf'' ef)
100102 Yes prf'' => Yes (prf'', prf', prf)
101103
@@ -182,9 +184,8 @@ fillBoard {n=(S n)} b l with (emptyCell b)
182184 | Left full = Just (b ** (l, full))
183185 | Right (coords ** p) = recurse last
184186 where
185− %assert_total
186187 tryAll : (v : Fin (S n)) -> (Fin (S n), Maybe (b' : Board (S n) ** LegalBoard b'))
187− tryAll v = --trace ("Trying " ++ show (the Int (cast v))) $
188+ tryAll v = assert_total $ --trace ("Trying " ++ show (the Int (cast v))) $
188189 case tryValue l coords p v of
189190 Right success => (v, Just success)
190191 Left _ => -- TODO: Prove unsolvable
@@ -192,9 +193,8 @@ fillBoard {n=(S n)} b l with (emptyCell b)
192193 FS k => tryAll (weaken k)
193194 FZ => (v, Nothing)
194195
195− %assert_total
196196 recurse : Fin (S n) -> Maybe (b' : Board (S n) ** CompleteBoard b')
197− recurse start =
197+ recurse start = assert_total $
198198 case tryAll start of
199199 (_, Nothing) => Nothing
200200 (FZ, Just (b' ** l')) => fillBoard b' l'
benchmarks/trivial/sortvec.idr+6−5
@@ -1,7 +1,9 @@
11module Main
22
33import System
4+import Effects
45import Effect.Random
6+import Data.Vect
57
68total
79insert : Ord a => a -> Vect n a -> Vect (S n) a
@@ -12,13 +14,12 @@ vsort : Ord a => Vect n a -> Vect n a
1214vsort [] = []
1315vsort (x :: xs) = insert x (vsort xs)
1416
15−mkSortVec : (n : Nat) -> Eff m [RND] (Vect n Int)
16−mkSortVec Z = return []
17−mkSortVec (S k) = return (fromInteger !(rndInt 0 10000) :: !(mkSortVec k))
17+mkSortVec : (n : Nat) -> Eff (Vect n Int) [RND]
18+mkSortVec Z = pure []
19+mkSortVec (S k) = pure (fromInteger !(rndInt 0 10000) :: !(mkSortVec k))
1820
1921main : IO ()
2022main = do (_ :: arg :: _) <- getArgs
21−-- let arg = "2000"
22− let vec = runPure [123456789] (mkSortVec (fromInteger (cast arg)))
23+ let vec = runPure $ (srand 123456789 *> mkSortVec (fromInteger (cast arg)))
2324 putStrLn "Made vector"
2425 printLn (vsort vec)
codegen/idris-c/Main.hs → codegen/idris-codegen-c/Main.hsrenamed+12−15
@@ -1,26 +1,26 @@
11module Main where
22
3−import Idris.Core.TT
43import Idris.AbsSyntax
54import Idris.ElabDecls
6−import Idris.REPL
7−
8−import IRTS.Compiler
5+import Idris.Main
6+import Idris.Options
97import IRTS.CodegenC
8+import IRTS.Compiler
109
10+import Util.System
11+
12+import Control.Monad
1113import System.Environment
1214import System.Exit
13−import Control.Monad
1415
15−import Paths_idris
1616
17−import Util.System
1817
1918data Opts = Opts { inputs :: [FilePath],
2019 interface :: Bool,
2120 output :: FilePath }
2221
23−showUsage = do putStrLn "Usage: idris-c <ibc-files> [-o <output-file>]"
22+showUsage = do putStrLn "A code generator which is intended to be called by the compiler, not by a user."
23+ putStrLn "Usage: idris-codegen-c <ibc-files> [-o <output-file>]"
2424 exitWith ExitSuccess
2525
2626getOpts :: IO Opts
@@ -36,17 +36,14 @@ c_main :: Opts -> Idris ()
3636c_main opts = do runIO setupBundledCC
3737 elabPrims
3838 loadInputs (inputs opts) Nothing
39− mainProg <- if interface opts
39+ mainProg <- if interface opts
4040 then liftM Just elabMain
4141 else return Nothing
42− ir <- compile (Via "c") (output opts) mainProg
42+ ir <- compile (Via IBCFormat "c") (output opts) mainProg
4343 runIO $ codegenC ir
4444
4545main :: IO ()
4646main = do opts <- getOpts
47− if (null (inputs opts))
47+ if (null (inputs opts))
4848 then showUsage
49− else runMain (c_main opts)
50−
51−
52−
49+ else runMain (c_main opts)
codegen/idris-javascript/Main.hs → codegen/idris-codegen-javascript/Main.hsrenamed+8−8
@@ -1,23 +1,23 @@
11module Main where
22
3−import Idris.Core.TT
43import Idris.AbsSyntax
54import Idris.ElabDecls
6−import Idris.REPL
7−
8−import IRTS.Compiler
5+import Idris.Main
6+import Idris.Options
97import IRTS.CodegenJavaScript
8+import IRTS.Compiler
109
1110import System.Environment
1211import System.Exit
1312
14−import Paths_idris
1513
16−data Opts = Opts { inputs :: [FilePath]
14+data Opts = Opts {
15+ inputs :: [FilePath]
1716 , output :: FilePath
1817 }
1918
20−showUsage = do putStrLn "Usage: idris-javascript <ibc-files> [-o <output-file>]"
19+showUsage = do putStrLn "A code generator which is intended to be called by the compiler, not by a user."
20+ putStrLn "Usage: idris-codegen-javascript <ibc-files> [-o <output-file>]"
2121 exitWith ExitSuccess
2222
2323getOpts :: IO Opts
@@ -32,7 +32,7 @@ jsMain :: Opts -> Idris ()
3232jsMain opts = do elabPrims
3333 loadInputs (inputs opts) Nothing
3434 mainProg <- elabMain
35− ir <- compile (Via "javascript") (output opts) (Just mainProg)
35+ ir <- compile (Via IBCFormat "javascript") (output opts) (Just mainProg)
3636 runIO $ codegenJavaScript ir
3737
3838main :: IO ()
codegen/idris-node/Main.hs → codegen/idris-codegen-node/Main.hsrenamed+17−11
@@ -1,42 +1,48 @@
11module Main where
22
3−import Idris.Core.TT
43import Idris.AbsSyntax
54import Idris.ElabDecls
6−import Idris.REPL
7−
8−import IRTS.Compiler
5+import Idris.Main
6+import Idris.Options
97import IRTS.CodegenJavaScript
8+import IRTS.Compiler
9+
10+import Paths_idris
11+
12+import Control.Monad
1013
1114import System.Environment
1215import System.Exit
1316
14−import Paths_idris
15−
1617data Opts = Opts { inputs :: [FilePath]
18+ , interface :: Bool
1719 , output :: FilePath
1820 }
1921
20−showUsage = do putStrLn "Usage: idris-node <ibc-files> [-o <output-file>]"
22+showUsage = do putStrLn "A code generator which is intended to be called by the compiler, not by a user."
23+ putStrLn "Usage: idris-codegen-node <ibc-files> [-o <output-file>]"
2124 exitWith ExitSuccess
2225
2326getOpts :: IO Opts
2427getOpts = do xs <- getArgs
25− return $ process (Opts [] "main.js") xs
28+ return $ process (Opts [] False "main.js") xs
2629 where
2730 process opts ("-o":o:xs) = process (opts { output = o }) xs
31+ process opts ("--interface":xs) = process (opts { interface = True }) xs
2832 process opts (x:xs) = process (opts { inputs = x:inputs opts }) xs
2933 process opts [] = opts
3034
3135jsMain :: Opts -> Idris ()
3236jsMain opts = do elabPrims
3337 loadInputs (inputs opts) Nothing
34− mainProg <- elabMain
35− ir <- compile (Via "node") (output opts) (Just mainProg)
38+ mainProg <- if interface opts
39+ then return Nothing
40+ else liftM Just elabMain
41+ ir <- compile (Via IBCFormat "node") (output opts) mainProg
3642 runIO $ codegenNode ir
3743
3844main :: IO ()
3945main = do opts <- getOpts
4046 if (null (inputs opts))
4147 then showUsage
42− else runMain (jsMain opts)
48+ else runMain (jsMain opts)
config.mk+21−14
@@ -1,15 +1,26 @@
1−CC ?=cc
2−AR ?=ar
1+UNAME_INFO := $(shell uname -a)
2+
3+ifeq ($(filter , $(findstring MSYS, $(UNAME_INFO)) $(findstring MINGW, $(UNAME_INFO))),)
4+ ifeq (cc,$(CC))
5+ # In MSYS2, when using the mingw version of gcc, there is no cc -> gcc
6+ # symlink. We can't use ?= here because CC is set implicitly to cc.
7+ # Cross compiling users can set CC to their cross compiler.
8+ CC =gcc
9+ endif
10+endif
11+
312RANLIB ?=ranlib
413
514CABAL :=cabal
615# IDRIS_ENABLE_STATS should not be set in final release
716# Any flags defined here which alter the RTS API must also be added to src/IRTS/CodegenC.hs
8−CFLAGS :=-O2 -Wall -DHAS_PTHREAD -DIDRIS_ENABLE_STATS $(CFLAGS)
17+CFLAGS :=-O2 -Wall -std=c99 -pipe -fdata-sections -ffunction-sections -D_POSIX_C_SOURCE=200809L -DHAS_PTHREAD -DIDRIS_ENABLE_STATS $(CFLAGS)
918
10−#CABALFLAGS :=
19+# CABALFLAGS :=
20+CABALFLAGS += --enable-tests
1121## Disable building of Effects
12−#CABALFLAGS :=-f NoEffects
22+#CABALFLAGS :=-f NoEffects $(CABALFLAGS)
23+
1324
1425ifneq (, $(findstring bsd, $(MACHINE)))
1526 GMP_INCLUDE_DIR :=
@@ -20,24 +31,20 @@ endif
2031MACHINE := $(shell $(CC) -dumpmachine)
2132ifneq (, $(findstring darwin, $(MACHINE)))
2233 OS :=darwin
23−else
24−ifneq (, $(findstring cygwin, $(MACHINE)))
34+else ifneq (, $(findstring cygwin, $(MACHINE)))
2535 OS :=windows
26−else
27−ifneq (, $(findstring mingw, $(MACHINE)))
36+else ifneq (, $(findstring mingw, $(MACHINE)))
37+ OS :=windows
38+else ifneq (, $(findstring windows, $(MACHINE)))
2839 OS :=windows
2940else
3041 OS :=unix
3142endif
32−endif
33−endif
3443
3544ifeq ($(OS),darwin)
3645 SHLIB_SUFFIX :=.dylib
37−else
38−ifeq ($(OS),windows)
46+else ifeq ($(OS),windows)
3947 SHLIB_SUFFIX :=.DLL
4048else
4149 SHLIB_SUFFIX :=.so
4250endif
43−endif
custom.mk-alldeps+1−1
@@ -1 +1 @@
1−CABALFLAGS += -f LLVM -f FFI -f curses --disable-documentation --disable-profiling --disable-library-profiling
1+CABALFLAGS += -f GMP -f FFI --disable-documentation --disable-profiling --disable-library-profiling
docs/LICENSE+1−1
@@ -7,4 +7,4 @@ rights to Documentation for Idris.
77
88More information concerning the CC0 can be found online at:
99
10− http://creativecommons.org/publicdomain/zero/1.0/
10+ https://creativecommons.org/publicdomain/zero/1.0/
docs/Makefile+1−1
@@ -9,7 +9,7 @@ BUILDDIR = _build
99
1010# User-friendly check for sphinx-build
1111ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
12−$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
12+$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from https://www.sphinx-doc.org/)
1313endif
1414
1515# Internal variables.
docs/README.md+3−3
@@ -1,7 +1,7 @@
11# Documentation for the Idris Language.
22
33
4−This manual has been prepared using ReStructured Text and the [Sphinx Documentation Generator](http://sphinx-doc.org) for future inclusion on [Read The Docs](http://www.readthedocs.org).
4+This manual has been prepared using ReStructured Text and the [Sphinx Documentation Generator](https://www.sphinx-doc.org) for future inclusion on [Read The Docs](https://www.readthedocs.org).
55
66## Dependencies
77
@@ -12,7 +12,7 @@ To build the manual the following dependencies must be met. We assume that you h
1212Python should be installed by default on most systems.
1313Sphinx can be installed either through your hosts package manager or using pip/easy_install.
1414
15−*Note* [ReadTheDocs](http://www.readthedocs.org) works with Sphinx
15+*Note* [ReadTheDocs](https://www.readthedocs.org) works with Sphinx
1616 `v1.2.2`. If you install a more recent version of sphinx then
1717 'incorrectly' marked up documentation may get passed the build system
1818 of readthedocs and be ignored. In the past we had several code-blocks
@@ -45,7 +45,7 @@ rights to Documentation for Idris.
4545
4646More information concerning the CC0 can be found online at:
4747
48− http://creativecommons.org/publicdomain/zero/1.0/
48+ https://creativecommons.org/publicdomain/zero/1.0/
4949
5050
5151When contributing material to the manual please bear in mind that the work will be licensed as above.
docs/_static/theme_overrides.cssnew file+13
@@ -0,0 +1,13 @@
1+/* override table width restrictions */
2+@media screen and (min-width: 767px) {
3+
4+ .wy-table-responsive table td {
5+ /* !important prevents the common CSS stylesheets from overriding
6+ this as on RTD they are loaded after this stylesheet */
7+ white-space: normal !important;
8+ }
9+
10+ .wy-table-responsive {
11+ overflow: visible !important;
12+ }
13+}
docs/conf.py+81−12
@@ -33,7 +33,7 @@ on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
3333# ones.
3434extensions = [
3535 'sphinx.ext.todo',
36− 'sphinx.ext.pngmath',
36+# 'sphinx.ext.pngmath', # imgmath is not supported on readthedocs.
3737 'sphinx.ext.ifconfig',
3838]
3939
@@ -51,7 +51,7 @@ master_doc = 'index'
5151
5252# General information about the project.
5353project = u'Idris'
54−copyright = u'2015, The Idris Community'
54+copyright = u'2017-2020, The Idris Community'
5555author = u'The Idris Community'
5656
5757# The version info for the project you're documenting, acts as replacement for
@@ -59,9 +59,9 @@ author = u'The Idris Community'
5959# built documents.
6060#
6161# The short X.Y version.
62−version = '0.9.18'
62+version = '1.3'
6363# The full version, including alpha/beta/rc tags.
64−release = '0.9.18'
64+release = '1.3.2'
6565
6666# The language for content autogenerated by Sphinx. Refer to documentation
6767# for a list of supported languages.
@@ -151,6 +151,12 @@ if not on_rtd: # only import and set the theme if we're building docs locally
151151# so a file named "default.css" will overwrite the builtin "default.css".
152152html_static_path = ['_static']
153153
154+html_context = {
155+ 'css_files': [
156+ '_static/theme_overrides.css', # override wide tables in RTD theme
157+ ],
158+ }
159+
154160# Add any extra paths that contain custom files (such as robots.txt or
155161# .htaccess) here, relative to this directory. These files are copied
156162# directly to the root of the documentation.
@@ -216,16 +222,77 @@ htmlhelp_basename = 'IdrisManualdoc'
216222
217223# -- Options for LaTeX output ---------------------------------------------
218224
225+latex_title_page = r'''
226+\begin{titlepage}
227+ \vspace*{\fill}
228+ \begin{center}
229+ \includegraphics[width=0.25\textwidth]{idris-512x512.png}\par
230+ \vspace{1cm}
231+ {\huge\sffamily\bfseries \makeatletter\@title\makeatother\par}
232+ \vspace{1cm}
233+ {\Large Version \version\par}
234+ \end{center}
235+ \vspace*{\fill}
236+\end{titlepage}
237+'''
238+
219239latex_elements = {
220240# The paper size ('letterpaper' or 'a4paper').
221241'papersize': 'a4paper',
222242
243+'fontpkg': '',
244+'inputenc': '',
245+'utf8extra': '',
246+'releasename': 'Version',
247+
223248# The font size ('10pt', '11pt' or '12pt').
224249'pointsize': '10pt',
225250
226251# Additional stuff for the LaTeX preamble.
227−#'preamble': '',
228−
252+'preamble': r'''
253+\usepackage{lmodern}
254+\usepackage{textalpha}
255+\usepackage[T1]{fontenc}
256+\usepackage[utf8x]{inputenc}
257+\usepackage{titlesec}
258+%
259+\usepackage{fancyhdr}
260+\fancypagestyle{plain}{%
261+ \renewcommand{\headrulewidth}{0pt}%
262+ \fancyhf{}%
263+ \fancyfoot[C]{\textsf{\thepage}}
264+}
265+\pagestyle{fancy}
266+\fancyhf{}
267+\fancyhead[LE,RO]{\textsf{\bfseries{v\version}}}
268+\fancyhead[LO,RE]{\textsf{\bfseries\leftmark}}
269+%\fancyhead[LO]{\textsf{\bfseries{\leftmark}}}
270+%\fancyhead[RO]{\textsf{\bfseries{v\version}}}
271+%\fancyhead[RE]{\textsf{\bfseries{\leftmark}}}
272+%\fancyhead[LE]{\textsf{\bfseries{v\version}}}
273+\fancyfoot[C]{\textsf{\thepage}}
274+\renewcommand{\footrulewidth}{0pt}
275+\renewcommand{\headrulewidth}{0pt}
276+%
277+\usepackage[font={small,it}]{caption}
278+\titleformat{\section}
279+ {\normalfont\sffamily\Large\bfseries\color{black}}
280+ {\thesection}{1em}{}
281+\titleformat{\subsection}
282+ {\sffamily\large\bfseries\color{black}}
283+ {\thesubsection}{1em}{}
284+\titleformat{\subsubsection}
285+ {\sffamily\normalsize\bfseries\color{black}}
286+ {\thesubsubsection}{1em}{}
287+\titleformat{\paragraph}{\normalfont\normalsize\slshape}{\theparagraph}{1em}{}
288+\setlength{\parskip}{1em}
289+%
290+\hypersetup{colorlinks = false}
291+\definecolor{VerbatimBorderColor}{rgb}{1,1,1}
292+''',
293+
294+'maketitle': latex_title_page,
295+'tableofcontents': "\\tableofcontents"
229296# Latex figure (float) alignment
230297#'figure_align': 'htbp',
231298}
@@ -234,15 +301,17 @@ latex_elements = {
234301# (source start file, target name, title,
235302# author, documentclass [howto, manual, or own class]).
236303latex_documents = [
237− ('guides/index', 'idris-guides.tex', u'Idris Tutorial Series', u'The Idris Community', 'manual'),
238− ('reference/index', 'idris-reference.tex', u'The Idris Reference', u'The Idris Community', 'manual'),
239− ('tutorial/index', 'idris-tutorial.tex', u'The Idris Tutorial', u'The Idris Community', 'manual'),
240− ('effects/index', 'eff-tutorial.tex', u'The Effects Tutorial', u'The Idris Community', 'manual')
241− ]
304+ # (master_doc, 'idris.tex', u'Documentation for the Idris Language', u'The Idris Community', 'report')
305+ ('tutorial/index', 'idris-tutorial.tex', u'The Idris Tutorial', u'The Idris Community', 'howto'),
306+]
307+
308+
309+latex_show_pagerefs = True
310+latex_show_url = 'footnote'
242311
243312# The name of an image file (relative to this directory) to place at the top of
244313# the title page.
245−#latex_logo = None
314+latex_logo = '../icons/idris-512x512.png'
246315
247316# For "manual" documents, if this is true, then toplevel headings are parts,
248317# not chapters.
docs/effects/conclusions.rst+11−11
@@ -13,21 +13,21 @@ paper [1]_.
1313Some libraries and programs which use ``Effects`` can be found in the
1414following places:
1515
16−- http://github.com/edwinb/SDL-idris — some bindings for the SDL media
16+- https://github.com/edwinb/SDL-idris — some bindings for the SDL media
1717 library, supporting graphics in particular.
1818
19−- http://github.com/edwinb/idris-demos — various demonstration
19+- https://github.com/edwinb/idris-demos — various demonstration
2020 programs, including several examples from this tutorial, and a “Space
2121 Invaders” game.
2222
2323- https://github.com/SimonJF/IdrisNet2 — networking and socket
2424 libraries.
2525
26−- http://github.com/edwinb/Protocols — a high level communication
26+- https://github.com/edwinb/Protocols — a high level communication
2727 protocol description language.
2828
2929The inspiration for the ``Effects`` library was Bauer and Pretnar’s
30−Eff language [2]_, which describes a langauge based on algebraic
30+Eff language [2]_, which describes a language based on algebraic
3131effects and handlers. Other recent languages and libraries have also
3232been built on this ideas, for example [3]_ and [4]_. The theoretical
3333foundations are also well-studied see [5]_, [6]_, [7]_, [8]_.
@@ -37,32 +37,32 @@ foundations are also well-studied see [5]_, [6]_, [7]_, [8]_.
3737.. [1] Edwin Brady. 2013. Programming and reasoning with algebraic
3838 effects and dependent types. SIGPLAN Not. 48, 9 (September
3939 2013), 133-144. DOI=10.1145/2544174.2500581
40− http://doi.acm.org/10.1145/2544174.2500581
40+ https://dl.acm.org/citation.cfm?doid=2544174.2500581
4141
4242.. [2] Andrej Bauer, Matija Pretnar, Programming with algebraic
4343 effects and handlers, Journal of Logical and Algebraic Methods
4444 in Programming, Volume 84, Issue 1, January 2015, Pages
4545 108-123, ISSN 2352-2208,
46− http://dx.doi.org/10.1016/j.jlamp.2014.02.001.
47− (http://www.sciencedirect.com/science/article/pii/S2352220814000194)
46+ http://math.andrej.com/wp-content/uploads/2012/03/eff.pdf
47+
4848
4949.. [3] Ben Lippmeier. 2009. Witnessing Purity, Constancy and
5050 Mutability. In Proceedings of the 7th Asian Symposium on
5151 Programming Languages and Systems (APLAS '09), Zhenjiang Hu
5252 (Ed.). Springer-Verlag, Berlin, Heidelberg,
5353 95-110. DOI=10.1007/978-3-642-10672-9_9
54− http://dx.doi.org/10.1007/978-3-642-10672-9_9
54+ https://link.springer.com/chapter/10.1007%2F978-3-642-10672-9_9
55+
5556
5657.. [4] Ohad Kammar, Sam Lindley, and Nicolas Oury. 2013. Handlers in
5758 action. SIGPLAN Not. 48, 9 (September 2013),
5859 145-158. DOI=10.1145/2544174.2500590
59− http://doi.acm.org/10.1145/2544174.2500590
60+ https://dl.acm.org/citation.cfm?doid=2544174.2500590
6061
6162.. [5] Martin Hyland, Gordon Plotkin, John Power, Combining effects:
6263 Sum and tensor, Theoretical Computer Science, Volume 357,
6364 Issues 1–3, 25 July 2006, Pages 70-99, ISSN 0304-3975,
64− http://dx.doi.org/10.1016/j.tcs.2006.03.013.
65− (http://www.sciencedirect.com/science/article/pii/S0304397506002659)
65+ (https://www.sciencedirect.com/science/article/pii/S0304397506002659)
6666
6767.. [6] Paul Blain Levy. 2004. Call-By-Push-Value: A
6868 Functional/Imperative Synthesis (Semantics Structures in
docs/effects/depeff.rst+21−12
@@ -43,12 +43,12 @@ express this as follows:
4343
4444.. code-block:: idris
4545
46− readInt : Eff ()[STATE (Vect n Int), STDIO]
47− [STATE (Vect (S n) Int), STDIO]
46+ readInt : Eff () [STATE (Vect n Int), STDIO]
47+ [STATE (Vect (S n) Int), STDIO]
4848 readInt = do let x = trim !getStr
4949 putM (cast x :: !get)
5050
51−The notation ``{ xs ==> xs’ } Eff a`` in a type means that the operation
51+The type ``Eff a xs xs'`` means that the operation
5252begins with effects ``xs`` available, and ends with effects ``xs’``
5353available. We have used ``putM`` to update the state, where the ``M``
5454suffix indicates that the *type* is being updated as well as the value.
@@ -96,7 +96,7 @@ value read from the user was valid. We can express this in the type:
9696 else [STATE (Vect n Int), STDIO])
9797 readInt = do let x = trim !getStr
9898 case all isDigit (unpack x) of
99− False => pure False
99+ False => pureM False
100100 True => do putM (cast x :: !get)
101101 pureM True
102102
@@ -153,12 +153,21 @@ file management follows a resource usage protocol with the following
153153
154154- When a file is closed, its handle should no longer be used
155155
156−These requirements can be expressed formally in , by creating a
156+These requirements can be expressed formally by creating a
157157``FILE_IO`` effect parameterised over a file handle state, which is
158158either empty, open for reading, or open for writing. The ``FILE_IO``
159−effect’s definition is given below. Note that this
160−effect is mainly for illustrative purposes—typically we would also like
161−to support random access files and better reporting of error conditions.
159+effect’s definition is given below.
160+
161+.. note::
162+ This effect is mainly for illustrative purposes.
163+ Typically we would also like to support random access files and
164+ better reporting of error conditions.
165+
166+ Moreover, the ``FILE`` effect in the ``Effect.File`` module of
167+ the ``effects`` library uses slightly more complicated types to
168+ support erroneous behaviour of each function and to support more
169+ compilcated modes of opening, like for reading **and** writing,
170+ appending or truncating.
162171
163172.. code-block:: idris
164173
@@ -173,7 +182,7 @@ to support random access files and better reporting of error conditions.
173182
174183 open : (fname : String)
175184 -> (m : Mode)
176− -> Eff Bool [FILE_IO ()]
185+ -> Eff Bool [FILE_IO ()]
177186 (\res => [FILE_IO (case res of
178187 True => OpenFile m
179188 False => ())])
@@ -183,7 +192,7 @@ to support random access files and better reporting of error conditions.
183192 writeLine : String -> Eff () [FILE_IO (OpenFile Write)]
184193 eof : Eff Bool [FILE_IO (OpenFile Read)]
185194
186− instance Handler FileIO IO
195+ Handler FileIO IO where { ... }
187196
188197In particular, consider the type of ``open``:
189198
@@ -191,7 +200,7 @@ In particular, consider the type of ``open``:
191200
192201 open : (fname : String)
193202 -> (m : Mode)
194− -> Eff Bool [FILE_IO ()]
203+ -> Eff Bool [FILE_IO ()]
195204 (\res => [FILE_IO (case res of
196205 True => OpenFile m
197206 False => ())])
@@ -207,7 +216,7 @@ we continue the protocol accordingly.
207216
208217 readFile : Eff (List String) [FILE_IO (OpenFile Read)]
209218 readFile = readAcc [] where
210− readAcc : List String -> Eff (List String) [FILE_IO (OpenFile Read)]
219+ readAcc : List String -> Eff (List String) [FILE_IO (OpenFile Read)]
211220 readAcc acc = if (not !eof)
212221 then readAcc (!readLine :: acc)
213222 else pure (reverse acc)
docs/effects/hangman.rst+9−10
@@ -108,16 +108,15 @@ effect signature:
108108 Guess : (x : Char) ->
109109 sig MysteryRules Bool
110110 (Mystery (Running (S g) (S w)))
111− (\inword =>
112− Mystery (case inword of
113− True => (Running (S g) w)
114− False => (Running g (S w))))
111+ (\inword => if inword
112+ then Mystery (Running (S g) w)
113+ else Mystery (Running g (S w)))
115114 Won : sig MysteryRules () (Mystery (Running g 0))
116115 (Mystery NotRunning)
117116 Lost : sig MysteryRules () (Mystery (Running 0 g))
118117 (Mystery NotRunning)
119118 NewWord : (w : String) ->
120− sig MysteryRules () h (Mystery (Running 6 (length (letters w))))
119+ sig MysteryRules () (Mystery NotRunning) (Mystery (Running 6 (length (letters w))))
121120 Get : sig MysteryRules String (Mystery h)
122121
123122This description says nothing about how the rules are implemented. In
@@ -194,7 +193,7 @@ implementation for ``MysteryRules`` is surprisingly straightforward:
194193
195194.. code-block:: idris
196195
197− instance Handler MysteryRules m where
196+ Handler MysteryRules m where
198197 handle (MkG w g got []) Won k = k () (GameWon w)
199198 handle (MkG w Z got m) Lost k = k () (GameLost w)
200199
@@ -243,11 +242,11 @@ running ``game``:
243242.. code-block:: idris
244243
245244 runGame : Eff () [MYSTERY NotRunning, RND, SYSTEM, STDIO]
246− runGame = do srand (cast !time)
247− let w = index !(rndFin WEWEWE) words
248− NewWord w
245+ runGame = do srand !time
246+ let w = index !(rndFin _) words
247+ call $ NewWord w
249248 game
250− putStrLn !Get
249+ putStrLn !(call Get)
251250
252251We use the system time (``time`` from the ``SYSTEM`` effect; see
253252Appendix :ref:`sect-appendix`) to initialise the random number
docs/effects/impleff.rst+15−15
@@ -93,16 +93,16 @@ Recall that to run an effectful program in ``Eff``, we use one of the
9393``run`` family of functions to run the program in a particular
9494computation context ``m``. For each effect, therefore, we must explain
9595how it is executed in a particular computation context for ``run`` to
96−work in that context. This is achieved with the following type class:
96+work in that context. This is achieved with the following interface:
9797
9898.. code-block:: idris
9999
100− class Handler (e : Effect) (m : Type -> Type) where
100+ interface Handler (e : Effect) (m : Type -> Type) where
101101 handle : resource -> (eff : e t resource resource') ->
102102 ((x : t) -> resource' x -> m a) -> m a
103103
104−We have already seen some instance declarations in the effect
105−summaries in Section :ref:`sect-simpleff`. An instance of ``Handler e
104+We have already seen some implementation declarations in the effect
105+summaries in Section :ref:`sect-simpleff`. An implementation of ``Handler e
106106m`` means that the effect declared with signature ``e`` can be run in
107107computation context ``m``. The ``handle`` function takes:
108108
@@ -123,7 +123,7 @@ in the case of ``Get``, or passes on a new state, in the case of
123123
124124.. code-block:: idris
125125
126− instance Handler State m where
126+ Handler State m where
127127 handle st Get k = k st st
128128 handle st (Put n) k = k () n
129129
@@ -144,7 +144,7 @@ functions in ``Eff``, as follows:
144144
145145**An implementation detail (aside):** The ``call`` function converts
146146an ``Effect`` to a function in ``Eff``, given a proof that the effect
147−is available. This proof can be constructed automatically by , since
147+is available. This proof can be constructed automatically, since
148148it is essentially an index into a statically known list of effects:
149149
150150.. code-block:: idris
@@ -176,7 +176,7 @@ The following listing summarises what is required to define the
176176 STATE : Type -> EFFECT
177177 STATE t = MkEff t State
178178
179− instance Handler State m where
179+ Handler State m where
180180 handle st Get k = k st st
181181 handle st (Put n) k = k () n
182182
@@ -211,13 +211,13 @@ directly.
211211 PutCh : Char -> sig StdIO ()
212212 GetCh : sig StdIO Char
213213
214− instance Handler StdIO IO where
214+ Handler StdIO IO where
215215 handle () (PutStr s) k = do putStr s; k () ()
216216 handle () GetStr k = do x <- getLine; k x ()
217217 handle () (PutCh c) k = do putChar c; k () ()
218218 handle () GetCh k = do x <- getChar; k x ()
219219
220− instance Handler StdIO (IOExcept a) where
220+ Handler StdIO (IOExcept a) where
221221 handle () (PutStr s) k = do ioe_lift $ putStr s; k () ()
222222 handle () GetStr k = do x <- ioe_lift $ getLine; k x ()
223223 handle () (PutCh c) k = do ioe_lift $ putChar c; k () ()
@@ -241,10 +241,10 @@ error.
241241 data Exception : Type -> Effect where
242242 Raise : a -> sig (Exception a) b
243243
244− instance Handler (Exception a) Maybe where
244+ Handler (Exception a) Maybe where
245245 handle _ (Raise e) k = Nothing
246246
247− instance Handler (Exception a) List where
247+ Handler (Exception a) List where
248248 handle _ (Raise e) k = []
249249
250250 EXCEPTION : Type -> EFFECT
@@ -265,14 +265,14 @@ value.
265265 data Selection : Effect where
266266 Select : List a -> sig Selection a
267267
268− instance Handler Selection Maybe where
268+ Handler Selection Maybe where
269269 handle _ (Select xs) k = tryAll xs where
270270 tryAll [] = Nothing
271271 tryAll (x :: xs) = case k x () of
272272 Nothing => tryAll xs
273273 Just v => Just v
274274
275− instance Handler Selection List where
275+ Handler Selection List where
276276 handle r (Select xs) k = concatMap (\x => k x r) xs
277277
278278 SELECT : EFFECT
@@ -282,7 +282,7 @@ value.
282282Here, the continuation is called multiple times in each handler, for
283283each value in the list of possible values. In the ``List`` handler, we
284284accumulate all successful results, and in the ``Maybe`` handler we try
285−the first value in the last, and try later values only if that fails.
285+the first value in the list, and try later values only if that fails.
286286
287287File Management
288288===============
@@ -308,7 +308,7 @@ the equivalent ``Eff`` programs.
308308 WriteLine : String -> sig FileIO () (OpenFile Write)
309309 EOF : sig FileIO Bool (OpenFile Read)
310310
311− instance Handler FileIO IO where
311+ Handler FileIO IO where
312312 handle () (Open fname m) k = do h <- openFile fname m
313313 if !(validFile h)
314314 then k True (FH h)
docs/effects/index.rst+14−2
@@ -6,14 +6,26 @@ The Effects Tutorial
66
77A tutorial on the `Effects` package in `Idris`.
88
9+.. topic:: Effects and the ``Control.ST`` module
10+
11+ There is a new module in the ``contrib`` package, ``Control.ST``, which
12+ provides the resource tracking facilities of `Effects` but with
13+ better support for creating and deleting resources, and implementing
14+ resources in terms of other resources.
15+
16+ Unless you have a particular reason to use `Effects` you are strongly
17+ recommended to use ``Control.ST`` instead. There is a tutorial available
18+ on this site for ``Control.ST`` with several examples
19+ (:ref:`st-tutorial-index`).
20+
921.. note::
1022
1123 The documentation for Idris has been published under the Creative
1224 Commons CC0 License. As such to the extent possible under law, *The
13− Idris Community* has waived all copyright and related or neighboring
25+ Idris Community* has waived all copyright and related or neighbouring
1426 rights to Documentation for Idris.
1527
16− More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
28+ More information concerning the CC0 can be found online at: https://creativecommons.org/publicdomain/zero/1.0/
1729
1830.. toctree::
1931 :maxdepth: 1
docs/effects/introduction.rst+5−4
@@ -3,7 +3,7 @@ Introduction
33************
44
55Pure functional languages with dependent types such as `Idris
6−<http://idris-lang.org/>`_ support reasoning about programs directly
6+<https://www.idris-lang.org/>`_ support reasoning about programs directly
77in the type system, promising that we can *know* a program will run
88correctly (i.e. according to the specification in its type) simply
99because it compiles. Realistically, though, things are not so simple:
@@ -17,7 +17,8 @@ exceptions, and verified resource management.
1717This tutorial assumes familiarity with pure programming in Idris,
1818as described in Sections 1–6 of the main tutorial [1]_. The examples
1919presented are tested with Idris and can be found in the
20−examples directory of the Idris repository.
20+examples directory of the Idris repository. The ``-p effects`` flag
21+is needed when starting Idris.
2122
2223Consider, for example, the following introductory function which
2324illustrates the kind of properties which can be expressed in the type
@@ -53,7 +54,7 @@ this specific example later.
5354Hello world
5455===========
5556
56−To give an idea of how programs with effects look in , here is the
57+To give an idea of how programs with effects look, here is the
5758ubiquitous “Hello world” program, written using the ``Effects``
5859library:
5960
@@ -65,7 +66,7 @@ library:
6566 import Effect.StdIO
6667
6768 hello : Eff () [STDIO]
68− hello = putStrLn “Hello world!”
69+ hello = putStrLn "Hello world!"
6970
7071 main : IO ()
7172 main = run hello
docs/effects/simpleeff.rst+65−62
@@ -19,9 +19,9 @@ in a module ``Effect.State``
1919 putM : y -> Eff () [STATE x] [STATE y]
2020 update : (x -> x) -> Eff () [STATE x]
2121
22− instance Handler State m
22+ Handler State m where { ... }
2323
24−The last line, ``instance Handler State m``, means that the ``STATE``
24+The last line, ``Handler State m where { ... }``, means that the ``STATE``
2525effect is usable in any computation context ``m``. That is, a program
2626which uses this effect and returns something of type ``a`` can be
2727evaluated to something of type ``m a`` using ``run``, for any
@@ -63,8 +63,8 @@ can perform (or at the very least simulate) console I/O:
6363 getStr : Eff String [STDIO]
6464 getChar : Eff Char [STDIO]
6565
66− instance Handler StdIO IO
67− instance Handler StdIO (IOExcept a)
66+ Handler StdIO IO where { ... }
67+ Handler StdIO (IOExcept a) where { ... }
6868
6969Examples
7070--------
@@ -120,7 +120,7 @@ Aside: Resource Types
120120---------------------
121121
122122To find out the resource type of an effect, if necessary (for example
123−if we want to initialise a resource explicitiy with ``runInit`` rather
123+if we want to initialise a resource explicitly with ``runInit`` rather
124124than using a default value with ``run``) we can run the
125125``resourceType`` function at the REPL:
126126
@@ -148,11 +148,11 @@ generally:
148148
149149 raise : a -> Eff b [EXCEPTION a]
150150
151− instance Handler (Exception a) Maybe
152− instance Handler (Exception a) List
153− instance Handler (Exception a) (Either a)
154− instance Handler (Exception a) (IOExcept a)
155− instance Show a => Handler (Exception a) IO
151+ Handler (Exception a) Maybe where { ... }
152+ Handler (Exception a) List where { ... }
153+ Handler (Exception a) (Either a) where { ... }
154+ Handler (Exception a) (IOExcept a) where { ... }
155+ Show a => Handler (Exception a) IO where { ... }
156156
157157Example
158158-------
@@ -161,13 +161,13 @@ Suppose we have a ``String`` which is expected to represent an integer
161161in the range ``0`` to ``n``. We can write a function ``parseNumber``
162162which returns an ``Int`` if parsing the string returns a number in the
163163appropriate range, or throws an exception otherwise. Exceptions are
164−paramaterised by an error type:
164+parameterised by an error type:
165165
166166.. code-block:: idris
167167
168− data Err = NotANumber | OutOfRange
168+ data Error = NotANumber | OutOfRange
169169
170− parseNumber : Int -> String -> Eff Int [EXCEPTION Err]
170+ parseNumber : Int -> String -> Eff Int [EXCEPTION Error]
171171 parseNumber num str
172172 = if all isDigit (unpack str)
173173 then let x = cast str in
@@ -178,23 +178,23 @@ paramaterised by an error type:
178178
179179Programs which support the ``EXCEPTION`` effect can be run in any
180180context which has some way of throwing errors, for example, we can run
181−``parseNumber`` in the ``Either Err`` context. It returns a value of
181+``parseNumber`` in the ``Either Error`` context. It returns a value of
182182the form ``Right x`` if successful:
183183
184184.. code-block:: idris
185185
186− *Exception> the (Either Err Int) $ run (parseNumber 42 "20")
187− Right 20 : Either Err Int
186+ *Exception> the (Either Error Int) $ run (parseNumber 42 "20")
187+ Right 20 : Either Error Int
188188
189189Or ``Left e`` on failure, carrying the appropriate exception:
190190
191191.. code-block:: idris
192192
193− *Exception> the (Either Err Int) $ run (parseNumber 42 "50")
194− Left OutOfRange : Either Err Int
193+ *Exception> the (Either Error Int) $ run (parseNumber 42 "50")
194+ Left OutOfRange : Either Error Int
195195
196− *Exception> the (Either Err Int) $ run (parseNumber 42 "twenty")
197− Left NotANumber : Either Err Int
196+ *Exception> the (Either Error Int) $ run (parseNumber 42 "twenty")
197+ Left NotANumber : Either Error Int
198198
199199In fact, we can do a little bit better with ``parseNumber``, and have
200200it return a *proof* that the integer is in the required range along
@@ -212,7 +212,8 @@ from the result of a dynamic check:
212212
213213.. code-block:: idris
214214
215− data So : Bool -> Type = Oh : So True
215+ data So : Bool -> Type where
216+ Oh : So True
216217
217218 choose : (b : Bool) -> Either (So b) (So (not b))
218219
@@ -222,7 +223,7 @@ the boundedness proof:
222223
223224.. code-block:: idris
224225
225− parseNumber : (x : Int) -> String -> Eff (Bounded x) [EXCEPTION Err]
226+ parseNumber : (x : Int) -> String -> Eff (Bounded x) [EXCEPTION Error]
226227 parseNumber x str
227228 = if all isDigit (unpack str)
228229 then let num = cast str in
@@ -247,7 +248,7 @@ Random number generation is also implemented by the library, in module
247248 rndInt : Integer -> Integer -> Eff Integer [RND]
248249 rndFin : (k : Nat) -> Eff (Fin (S k)) [RND]
249250
250− instance Handler Random m
251+ Handler Random m where { ... }
251252
252253Random number generation is considered side-effecting because its
253254implementation generally relies on some external source of randomness.
@@ -333,8 +334,8 @@ succeeds:
333334
334335 select : List a -> Eff a [SELECT]
335336
336− instance Handler Selection Maybe
337− instance Handler Selection List
337+ Handler Selection Maybe where { ... }
338+ Handler Selection List where { ... }
338339
339340Example
340341-------
@@ -382,7 +383,7 @@ definition:
382383
383384 vadd : Vect n Int -> Vect n Int -> Vect n Int
384385 vadd [] [] = []
385− vadd (x :: idris xs) (y :: ys) = x + y :: vadd xs ys
386+ vadd (x :: xs) (y :: ys) = x + y :: vadd xs ys
386387
387388Using , we can set up a program so that it reads input from a user,
388389checks that the input is valid (i.e both vectors contain integers, and
@@ -410,10 +411,28 @@ following type:
410411
411412This returns a dependent pair of a length, and a vector of that
412413length, because we cannot know in advance how many integers the user
413−is going to input. One way to implement this function, using ``-1`` to
414−indicate the end of input, is shown in Listing [readvec]. This uses a
415−variation on ``parseNumber`` which does not require a number to be
416−within range.
414+is going to input. We can use ``-1`` to indicate the end of input:
415+
416+.. code-block:: idris
417+
418+ read_vec : Eff (p ** Vect p Int) [STDIO]
419+ read_vec = do putStr "Number (-1 when done): "
420+ case run (parseNumber (trim !getStr)) of
421+ Nothing => do putStrLn "Input error"
422+ read_vec
423+ Just v => if (v /= -1)
424+ then do (_ ** xs) <- read_vec
425+ pure (_ ** v :: xs)
426+ else pure (_ ** [])
427+ where
428+ parseNumber : String -> Eff Int [EXCEPTION String]
429+ parseNumber str
430+ = if all (\x => isDigit x || x == '-') (unpack str)
431+ then pure (cast str)
432+ else raise "Not a number"
433+
434+This uses a variation on ``parseNumber`` which does not require a
435+number to be within range.
417436
418437Finally, we write a program which reads two vectors and prints the
419438result of pairwise addition of them, throwing an exception if the
@@ -434,23 +453,6 @@ equal. This does not stop us reading vectors from user input, but it
434453does require that the lengths are checked and any discrepancy is dealt
435454with gracefully.
436455
437−.. code-block:: idris
438−
439− read_vec : Eff (p ** Vect p Int) [STDIO]
440− read_vec = do putStr "Number (-1 when done): "
441− case run (parseNumber (trim !getStr)) of
442− Nothing => do putStrLn "Input error"
443− read_vec
444− Just v => if (v /= -1)
445− then do (_ ** xs) <- read_vec
446− pure (_ ** v :: xs)
447− else pure (_ ** [])
448− where
449− parseNumber : String -> Eff Int [EXCEPTION String]
450− parseNumber str
451− = if all (\x => isDigit x || x == '-') (unpack str)
452− then pure (cast str)
453− else raise "Not a number"
454456
455457Example: An Expression Calculator
456458=================================
@@ -494,8 +496,8 @@ values:
494496 Env = List (String, Integer)
495497
496498 eval : Expr -> Eff Integer [EXCEPTION String, STATE Env]
497− eval (Val x) = return x
498− eval (Add l r) = return $ !(eval l) + !(eval r)
499+ eval (Val x) = pure x
500+ eval (Add l r) = pure $ !(eval l) + !(eval r)
499501
500502Note that we are using ``!``-notation to avoid having to bind
501503subexpressions in a ``do`` block. Next, we add a case for evaluating
@@ -505,7 +507,7 @@ subexpressions in a ``do`` block. Next, we add a case for evaluating
505507
506508 eval (Var x) = case lookup x !get of
507509 Nothing => raise $ "No such variable " ++ x
508− Just val => return val
510+ Just val => pure val
509511
510512This retrieves the state (with ``get``, supported by the ``STATE Env``
511513effect) and raises an exception if the variable is not in the
@@ -542,7 +544,7 @@ which gives a random number up to a maximum value:
542544 | Random Integer
543545
544546Then, we need to deal with the new case, making sure that we extend
545−the list of events to include ``RND``. It doen’t matter where ``RND``
547+the list of events to include ``RND``. It doesn't matter where ``RND``
546548appears in the list, as long as it is present:
547549
548550.. code-block:: idris
@@ -558,7 +560,7 @@ has been generated:
558560
559561 eval (Random upper) = do val <- rndInt 0 upper
560562 putStrLn (show val)
561− return val
563+ pure val
562564
563565If we try this without extending the effects list, we would see an
564566error something like the following:
@@ -577,16 +579,17 @@ this simply by updating the type of ``eval`` to include ``STDIO``.
577579
578580 eval : Expr -> Eff Integer [STDIO, EXCEPTION String, RND, STATE Env]
579581
580−Note that using ``STDIO`` will restrict the number of contexts in
581−which ``eval`` can be ``run`` to those which support ``STDIO``, such
582−as ``IO``. Once effect lists get longer, it can be a good idea instead
583−to encapsulate sets of effects in a type synonym. This is achieved as
584−follows, simply by defining a function which computes a type, since
585−types are first class in Idris:
582+.. note:: Using ``STDIO`` will restrict the number of contexts in
583+ which ``eval`` can be ``run`` to those which support
584+ ``STDIO``, such as ``IO``. Once effect lists get longer, it
585+ can be a good idea instead to encapsulate sets of effects in
586+ a type synonym. This is achieved as follows, simply by
587+ defining a function which computes a type, since types are
588+ first class in Idris:
586589
587−.. code-block:: idris
590+ .. code-block:: idris
588591
589− EvalEff : Type -> Type
590− EvalEff t = Eff t [STDIO, EXCEPTION String, RND, STATE Env]
592+ EvalEff : Type -> Type
593+ EvalEff t = Eff t [STDIO, EXCEPTION String, RND, STATE Env]
591594
592− eval : Expr -> EvalEff Integer
595+ eval : Expr -> EvalEff Integer
docs/effects/state.rst+17−15
@@ -83,7 +83,7 @@ effectful program ``f`` has a type of the following form:
8383
8484.. code-block:: idris
8585
86− f : (x1 : a1) -> (x2 : a2) -> ... -> Eff t effs
86+ f : (x1 : a1) -> (x2 : a2) -> ... -> Eff t effs
8787
8888That is, the return type gives the effects that ``f`` supports
8989(``effs``, of type ``List EFFECT``) and the type the computation
@@ -189,7 +189,7 @@ shown in Listing [introprog].
189189 data BTree a = Leaf
190190 | Node (BTree a) a (BTree a)
191191
192− instance Show a => Show (BTree a) where
192+ Show a => Show (BTree a) where
193193 show Leaf = "[]"
194194 show (Node l x r) = "[" ++ show l ++ " "
195195 ++ show x ++ " "
@@ -231,19 +231,19 @@ here for illustrative purposes):
231231 run : Applicative m => {env : Env m xs} -> Eff a xs -> m a
232232
233233The ``env`` argument is implicit, and initialised automatically where
234−possible using default values given by instances of the following type
235−class:
234+possible using default values given by implementations of the following
235+interface:
236236
237237.. code-block:: idris
238238
239− class Default a where
239+ interface Default a where
240240 default : a
241241
242−Instances of ``Default`` are defined for all primitive types, and many
242+Implementations of ``Default`` are defined for all primitive types, and many
243243library types such as ``List``, ``Vect``, ``Maybe``, pairs, etc.
244244However, where no default value exists for a resource type (for
245245example, you may want a ``STATE`` type for which there is no
246−``Default`` instance) the resource environment can be given explicitly
246+``Default`` implementation) the resource environment can be given explicitly
247247using one of the following functions:
248248
249249.. code-block:: idris
@@ -323,7 +323,7 @@ applying a function to the current state.
323323
324324Finally, our top level ``treeTag`` function now returns a pair of the
325325number of leaves, and the new tree. Resources for labelled effects are
326−intialised using the ``:=`` operator (reminisicent of assignment in an
326+initialised using the ``:=`` operator (reminiscent of assignment in an
327327imperative language):
328328
329329.. code-block:: idris
@@ -419,10 +419,10 @@ underlying type ``EffM``:
419419
420420 EffM : (m : Type -> Type) -> (t : Type)
421421 -> (List EFFECT)
422− -> (t -> List EFFECT) -> Type
422+ -> (t -> List EFFECT) -> Type
423423
424424This is more general than the types we have been writing so far. It is
425−parameterised over an underying computation context ``m``, a
425+parameterised over an underlying computation context ``m``, a
426426result type ``t`` as we have already seen, as well as a ``List EFFECT`` and a
427427function type ``t -> List EFFECT``.
428428
@@ -443,16 +443,16 @@ operations which can change the set of available effects are:
443443 possible.
444444
445445While powerful, this can make uses of the ``EffM`` type hard to read.
446−Therefore the library provides an overloaded function ``Eff``
446+Therefore the library provides an overloaded function ``Eff``
447447There are the following three versions:
448448
449449.. code-block:: idris
450450
451451 SimpleEff.Eff : (t : Type) -> (input_effs : List EFFECT) -> Type
452− TransEff.Eff : (t : Type) -> (input_effs : List EFFECT) ->
452+ TransEff.Eff : (t : Type) -> (input_effs : List EFFECT) ->
453453 (output_effs : List EFFECT) -> Type
454− DepEff.Eff : (t : Type) -> (input_effs : List EFFECT) ->
455− (output_effs_fn : x -> List EFFECT) -> Type
454+ DepEff.Eff : (t : Type) -> (input_effs : List EFFECT) ->
455+ (output_effs_fn : t -> List EFFECT) -> Type
456456
457457So far, we have used only the first version, ``SimpleEff.Eff``, which
458458is defined as follows:
@@ -521,7 +521,9 @@ the ``new`` function, though this is beyond the scope of this tutorial.
521521.. [3] Edwin Brady. 2013. Programming and reasoning with algebraic
522522 effects and dependent types. SIGPLAN Not. 48, 9 (September
523523 2013), 133-144. DOI=10.1145/2544174.2500581
524− http://doi.acm.org/10.1145/2544174.2500581
524+ http://dl.acm.org/citation.cfm?doid=2544174.2500581
525+
526+
525527
526528.. |image| image:: ../image/effects-tree.png
527529 :width: 500px
docs/effects/summary.rst+37−37
@@ -22,11 +22,11 @@ EXCEPTION
2222
2323 raise : a -> Eff b [EXCEPTION a]
2424
25− instance Handler (Exception a) Maybe
26− instance Handler (Exception a) List
27− instance Handler (Exception a) (Either a)
28− instance Handler (Exception a) (IOExcept a)
29− instance Show a => Handler (Exception a) IO
25+ Handler (Exception a) Maybe where { ... }
26+ Handler (Exception a) List where { ... }
27+ Handler (Exception a) (Either a) where { ... }
28+ Handler (Exception a) (IOExcept a) where { ... }
29+ Show a => Handler (Exception a) IO where { ... }
3030
3131FILE\_IO
3232========
@@ -43,18 +43,18 @@ FILE\_IO
4343 data OpenFile : Mode -> Type
4444
4545 open : (fname : String)
46− -> (m : Mode)
47− -> Eff Bool [FILE_IO ()]
48− (\res => [FILE_IO (case res of
49− True => OpenFile m
50− False => ())])
46+ -> (m : Mode)
47+ -> Eff Bool [FILE_IO ()]
48+ (\res => [FILE_IO (case res of
49+ True => OpenFile m
50+ False => ())])
5151 close : Eff () [FILE_IO (OpenFile m)] [FILE_IO ()]
5252
53− readLine : Eff String [FILE_IO (OpenFile Read)]
53+ readLine : Eff String [FILE_IO (OpenFile Read)]
5454 writeLine : String -> Eff () [FILE_IO (OpenFile Write)]
55− eof : Eff Bool [FILE_IO (OpenFile Read)]
55+ eof : Eff Bool [FILE_IO (OpenFile Read)]
5656
57− instance Handler FileIO IO
57+ Handler FileIO IO where { ... }
5858
5959RND
6060===
@@ -69,11 +69,11 @@ RND
6969
7070 RND : EFFECT
7171
72− srand : Integer -> Eff m () [RND]
73− rndInt : Integer -> Integer -> Eff m Integer [RND]
74− rndFin : (k : Nat) -> Eff m (Fin (S k)) [RND]
72+ srand : Integer -> Eff () [RND]
73+ rndInt : Integer -> Integer -> Eff Integer [RND]
74+ rndFin : (k : Nat) -> Eff (Fin (S k)) [RND]
7575
76− instance Handler Random m
76+ Handler Random m where { ... }
7777
7878SELECT
7979======
@@ -86,10 +86,10 @@ SELECT
8686
8787 SELECT : EFFECT
8888
89− select : List a -> Eff m a [SELECT]
89+ select : List a -> Eff a [SELECT]
9090
91− instance Handler Selection Maybe
92− instance Handler Selection List
91+ Handler Selection Maybe where { ... }
92+ Handler Selection List where { ... }
9393
9494STATE
9595=====
@@ -102,12 +102,12 @@ STATE
102102
103103 STATE : Type -> EFFECT
104104
105− get : Eff m x [STATE x]
106− put : x -> Eff m () [STATE x]
107− putM : y -> Eff m () [STATE x] [STATE y]
108− update : (x -> x) -> Eff m () [STATE x]
105+ get : Eff x [STATE x]
106+ put : x -> Eff () [STATE x]
107+ putM : y -> Eff () [STATE x] [STATE y]
108+ update : (x -> x) -> Eff () [STATE x]
109109
110− instance Handler State m
110+ Handler State m where { ... }
111111
112112STDIO
113113=====
@@ -121,15 +121,15 @@ STDIO
121121
122122 STDIO : EFFECT
123123
124− putChar : Handler StdIO m => Char -> Eff m () [STDIO]
125− putStr : Handler StdIO m => String -> Eff m () [STDIO]
126− putStrLn : Handler StdIO m => String -> Eff m () [STDIO]
124+ putChar : Char -> Eff () [STDIO]
125+ putStr : String -> Eff () [STDIO]
126+ putStrLn : String -> Eff () [STDIO]
127127
128− getStr : Handler StdIO m => Eff m String [STDIO]
129− getChar : Handler StdIO m => Eff m Char [STDIO]
128+ getStr : Eff String [STDIO]
129+ getChar : Eff Char [STDIO]
130130
131− instance Handler StdIO IO
132− instance Handler StdIO (IOExcept a)
131+ Handler StdIO IO where { ... }
132+ Handler StdIO (IOExcept a) where { ... }
133133
134134SYSTEM
135135======
@@ -144,9 +144,9 @@ SYSTEM
144144
145145 SYSTEM : EFFECT
146146
147− getArgs : Handler System e => Eff e (List String) [SYSTEM]
148− time : Handler System e => Eff e Int [SYSTEM]
149− getEnv : Handler System e => String -> Eff e (Maybe String) [SYSTEM]
147+ getArgs : Eff (List String) [SYSTEM]
148+ time : Eff Int [SYSTEM]
149+ getEnv : String -> Eff (Maybe String) [SYSTEM]
150150
151− instance Handler System IO
152− instance Handler System (IOExcept a)
151+ Handler System IO where { ... }
152+ Handler System (IOExcept a) where { ... }
docs/elaboratorReflection/elabReflection.rstnew file+60
@@ -0,0 +1,60 @@
1+Extending Idris using Elaborator Reflection
2+===========================================
3+
4+Idris provides a mechanism to modify the language without having to recompile Idris itself. We can think of this in terms of metaprogramming or domain specific languages or just building in new capabilities.
5+
6+In order to extend the language we need to know something about how Idris is compiled. This page explains only what is needed to customise the elaboration. For more information about the compiler's implementation see `Edwin Brady's 2013 paper`_ and for customising the elaboration process see `Elaborator reflection: extending Idris in Idris`_ and `David Christiansen's PhD thesis`_.
7+
8+Compilation of Idris proceeds through a number of stages.
9+
10+- First, Idris is desugared by inserting placeholders for terms to be guessed by the compiler and replacing certain syntactic forms, such as do-notation, with the functions that implement them.
11+- Then, this desugared Idris is translated into a much simpler core language, called TT. This translation process is called elaboration.
12+- Finally, TT is type checked a second time to rule out errors, and then compiled into the target language.
13+
14+.. image:: ../image/idrisTopLevel.png
15+ :width: 484px
16+ :height: 147px
17+ :alt: diagram illustrating these stages of Idris compilation
18+
19+TT is a core language which is syntactically very simple. This makes it easy for computers to process but very verbose and hard for humans to read. The Idris elaborator is written in Haskell using an elaboration library that was inspired by the tactics in interactive proof assistants such as Coq.
20+
21+.. list-table::
22+
23+ * - There are some similarities with a proof assistant but in Idris the elaborator is an interpreter of Idris source in the elaboration monad, where each syntactic construct of Idris is interpreted as a sequence of tactics.
24+ - .. image:: ../image/compareToProofAssist.png
25+ :width: 206px
26+ :height: 112px
27+ :alt: diagram comparing elaboration with proof assistant
28+
29+The primitives in the elaboration library are not just useful for the implementors of Idris itself. They can also be used by authors of extensions to the compiler, using a mechanism known as elaborator reflection.
30+During elaboration TT (Raw) structure contains:
31+
32+- holes - placeholders for terms that have not yet been filled in.
33+- guesses - similar to let bindings, except with no reduction rule, so that elaboration programs can control the precise shape of terms that are under construction.
34+
35+For more information about holes and guesses see `Dependently Typed Functional Programs and their Proofs by McBride 1999`_.
36+
37+The following diagram is intended to illustrate a high level view of the tactics and how this eventually results in the TT language being generated. It is not necessary to understand the details at this stage. The intention is to help build up some intuition so that, when we get into the details, we can recognise how this fits into the big picture.
38+
39+.. image:: ../image/elabOverview.png
40+ :width: 410px
41+ :height: 282px
42+ :alt: diagram illustrating overview of TT language being generated from tactics.
43+
44+As already mentioned the TT core language is kept syntactically very simple, for instance, here are the binders in TT with corresponding code and logic type validity rules:
45+
46+.. list-table::
47+
48+ * - This diagram illustrates the basis of the compilation process in logic (in this case for binders). It is not necessary to be an expert logician to understand elaborator reflection. However, when learning about tactics, they may appear arbitrary without knowing some theory. For more information about this see `Edwin Brady's 2013 paper`_.
49+ - .. image:: ../image/binders.png
50+ :width: 310px
51+ :height: 203px
52+ :alt: diagram illustrating basis of code in logic
53+
54+.. target-notes::
55+.. _`Edwin Brady's 2013 paper`: https://eb.host.cs.st-andrews.ac.uk/drafts/impldtp.pdf
56+.. _`Elaborator reflection: extending Idris in Idris`: https://dl.acm.org/citation.cfm?doid=2951913.2951932
57+.. _`David Christiansen's PhD thesis`: https://davidchristiansen.dk/david-christiansen-phd.pdf
58+.. _`Dependently Typed Functional Programs and their Proofs by McBride 1999`: https://www.era.lib.ed.ac.uk/handle/1842/374
59+
60+
docs/reference/elaborator-reflection.rst → docs/elaboratorReflection/elaborator-reflection.rstrenamed+77−25
@@ -1,19 +1,17 @@
1−*********************
2−Elaborator Reflection
3−*********************
1+.. _elaborator-reflection:
2+
3+**********************************
4+Elaborator Reflection Introduction
5+**********************************
46
57The Idris elaborator is responsible for converting high-level Idris code into the core language.
68It is implemented as a kind of embedded tactic language in Haskell, where tactic scripts are written in an *elaboration monad* that provides error handling and a proof state.
7−For details, see Edwin Brady's 2013 paper in the Journal of Functional Programming.
9+For details, see `Edwin Brady's 2013 paper in the Journal of Functional
10+Programming <https://eb.host.cs.st-andrews.ac.uk/drafts/impldtp.pdf>`_.
811
912Elaborator reflection makes the elaboration type as well as a selection of its tactics available to Idris code.
1013This means that metaprograms written in Idris can have complete control over the elaboration process, generating arbitrary code, and they have access to all of the facilities available in the elaborator, such as higher-order unification, type checking, and emitting auxiliary definitions.
1114
12−WARNING
13−=======
14−
15−Elaborator reflection is a new, **experimental** feature. It **will change**. You've been warned.
16−
1715The Elaborator State
1816====================
1917
@@ -35,13 +33,16 @@ Running Elaborator Scripts
3533
3634On their own, tactics have no effect.
3735The meta-operation ``%runElab script`` runs ``script`` in the current elaboration context.
36+Before you can use ``%runElab``, you will have to enable the language extension by adding
37+``%language ElabReflection`` in your file (or by passing ``-X ElabReflection`` to the
38+``idris`` executable from your command line).
3839For example, the following script constructs the identity function at type ``Nat``:
3940
4041.. code-block:: idris
4142
4243 idNat : Nat -> Nat
43− idNat = %runElab (do intro (Just (UN "x"))
44− fill (Var (UN "x"))
44+ idNat = %runElab (do intro `{{x}}
45+ fill (Var `{{x}})
4546 solve)
4647
4748
@@ -60,8 +61,8 @@ We can generate identity functions at any concrete type using the same script:
6061.. code-block:: idris
6162
6263 mkId : Elab ()
63− mkId = do intro (Just (UN "x"))
64− fill (Var (UN "x"))
64+ mkId = do intro `{{x}}
65+ fill (Var `{{x}})
6566 solve
6667
6768 idNat : Nat -> Nat
@@ -77,10 +78,55 @@ We can generate identity functions at any concrete type using the same script:
7778Interactively Building Elab Scripts
7879===================================
7980
80−To build an ``Elab`` script interactively, use the ``:elab`` command at the REPL.
81−It takes the name of a hole as an argument.
82−The interface is largely the same as in Idris's interactive prover, except all meta-commands start with colon.
83−For example, use ``:qed`` instead of ``qed``, ``:abandon`` instead of ``abandon``, and ``:undo`` instead of ``undo``.
81+You can build an ``Elab`` script interactively at the REPL.
82+Use the command ``:metavars``, or ``:m`` for short, to list the available holes.
83+Then, issue the ``:elab <hole>`` command at the REPL
84+to enter the elaboration shell.
85+
86+At the shell, you can enter proof tactics to alter the proof state.
87+You can view the system-provided tactics prior to entering the shell
88+by issuing the REPL command ``:browse Language.Reflection.Elab.Tactics``.
89+When you have discharged all goals, you can complete the proof
90+using the ``:qed`` command and receive in return an elaboration script
91+that fills the hole.
92+
93+The interactive elaboration shell accepts a limited number of commands,
94+including a subset of the commands understood by the normal Idris REPL
95+as well as some elaboration-specific commands. It also supports the
96+``do``-syntax, meaning you can write ``res <- command`` to bind the result of
97+``command`` to variable ``res``.
98+
99+General-purpose commands:
100+
101+- ``:eval <EXPR>``, or ``:e <EXPR>`` for short, evaluates the provided expression
102+ and prints the result.
103+
104+- ``:type <EXPR>``, or ``:t <EXPR>`` for short, prints the provided expression
105+ together with its type.
106+
107+- ``:search <TYPE>`` searches for definitions having the provided type.
108+
109+- ``:doc <NAME>`` searches for definitions with the provided name and prints their
110+ documentation.
111+
112+
113+Commands for viewing the proof state:
114+
115+- ``:state`` displays the current state of the term being constructed. It lists both
116+ other goals and the current goal.
117+
118+- ``:term`` displays the current proof term as well as its yet-to-be-filled holes.
119+
120+
121+Commands for manipulating the proof state:
122+
123+- ``:undo`` undoes the effects of the last tactic.
124+
125+- ``:abandon`` gives up on proving the current lemma and quits the elaboration shell.
126+
127+- ``:qed`` finishes the script and exits the elaboration shell. The shell will only accept
128+ this command once it reports, "No more goals." On exit, it will print out the finished
129+ elaboration script for you to copy into your program.
84130
85131
86132Failure
@@ -90,7 +136,7 @@ Some tactics may *fail*.
90136For example, ``intro`` will fail if the focused hole does not have a function type, ``solve`` will fail if the current hole does not contain a guess, and ``fill`` will fail if the term to be filled in has the wrong type.
91137Scripts can also fail explicitly using the ``fail`` tactic.
92138
93−To account for failure, there is an ``Alternative`` instance for ``Elab``.
139+To account for failure, there is an ``Alternative`` implementation for ``Elab``.
94140The ``<|>`` operator first tries the script to its left.
95141If that script fails, any changes that it made to the state are undone and the right argument is executed.
96142If the first argument succeeds, then the second argument is not executed.
@@ -123,7 +169,7 @@ If the goal type turns out to have been the unit type, we fill using the unit co
123169Otherwise, we fail with an error message informing the user that the current goal is not trivial.
124170
125171Additionally, the elaboration state can be dumped into an error message with the ``debug`` tactic.
126−A variant, ``debugMessage``, allows arbitrary messages to be included with the state, allowing for a kind of "``printf`` debuggging" of elaboration scripts.
172+A variant, ``debugMessage``, allows arbitrary messages to be included with the state, allowing for a kind of "``printf`` debugging" of elaboration scripts.
127173The message format used by ``debugMessage`` is the same for errors produced by the error reflection mechanism, allowing the re-use of the Idris pretty-printer when rendering messages.
128174
129175Changing the Global Context
@@ -131,8 +177,8 @@ Changing the Global Context
131177
132178``Elab`` scripts can modify the global context during execution.
133179Just as the Idris elaborator produces auxiliary definitions to implement features such as ``where``-blocks and ``case`` expressions, user elaboration scripts may need to define functions.
134−Furthermore, this allows ``Elab`` reflection to be used to implement features such as type class deriving.
135−The operations ``declareType``, ``defineFunction``, and ``addInstance`` allow ``Elab`` scripts to modify the global context.
180+Furthermore, this allows ``Elab`` reflection to be used to implement features such as interface deriving.
181+The operations ``declareType``, ``defineFunction``, and ``addImplementation`` allow ``Elab`` scripts to modify the global context.
136182
137183Using Idris's Features
138184======================
@@ -140,18 +186,24 @@ Using Idris's Features
140186The Idris compiler has a number of ways to automate the construction of terms.
141187On its own, the ``Elab`` state and its interactions with the unifier allow implicits to be solved using unification.
142188Additional operations use further features of Idris.
143−In particular, ``resolveTC`` solves the current goal using type class resolution, ``search`` invokes the proof search mechanism, and ``sourceLocation`` finds the context in the original file at which the elaboration script is invoked.
189+In particular, ``resolveTC`` solves the current goal using interface resolution, ``search`` invokes the proof search mechanism, and ``sourceLocation`` finds the context in the original file at which the elaboration script is invoked.
144190
145191
146192Recursive Elaboration
147193=====================
148194
149195The elaboration mechanism can be invoked recursively using the ``runElab`` tactic.
150−This tactic takes a goal type and an elaboration script as arguments and runs the script in a fresh lexical evironment to create an inhabitant of the provided goal type.
196+This tactic takes a goal type and an elaboration script as arguments and runs the script in a fresh lexical environment to create an inhabitant of the provided goal type.
151197This is primarily useful for code generation, particularly for generating pattern-matching clauses, where variable scope needs to be one that isn't the present local context.
152198
153199Learn More
154200==========
155−While this documentation is still incomplete, elaboration reflection works in Idris today.
156−As you wait for the completion of the documentation, the list of built-in tactics can be obtained using the ``:browse`` command in an Idris REPL or the corresponding feature in one of the graphical IDE clients to explore the ``Language.Reflection.Elab.Tactics`` namespace.
201+
202+Some tactics are introduced in the :ref:`proofs-index` section with further details, of those most relevant to elaborator reflection, on the following pages.
203+
204+The list of built-in tactics can be obtained using the ``:browse`` command in an Idris REPL or the corresponding feature in one of the graphical IDE clients to explore the ``Language.Reflection.Elab.Tactics`` namespace.
157205All of the built-in tactics contain documentation strings.
206+
207+For alternative ways to extend the Idris language see the :ref:`reference-index` section.
208+
209+The following pages explain more about the theory and practice of elaborator reflection.
docs/elaboratorReflection/example1.rstnew file+192
@@ -0,0 +1,192 @@
1+Elaborator Reflection - Identity Example
2+========================================
3+
4+.. list-table::
5+
6+ * - This example of elaborator reflection steps through this metaprogram that generates the identity function:
7+ - .. code-block:: idris
8+
9+ %language ElabReflection
10+
11+ idNat : Nat -> Nat
12+ idNat = %runElab (do intro `{{x}}
13+ fill (Var `{{x}})
14+ solve)
15+
16+.. list-table::
17+ :widths: 200 100
18+
19+ * - At the beginning of executing the elaboration script, the initial state consists of a single hole of type Nat -> Nat.
20+
21+ As a first approximation, the state consists of a term with holes in it, an indicator of which hole is focused, a queue of the next holes to focus on, and miscellaneous information like a source of fresh names. The intro tactic modifies this state, replacing the focused hole with a lambda and focusing on the lambda's body.
22+ - .. image:: ../image/tree.png
23+ :width: 119px
24+ :height: 109px
25+
26+The following is a walkthough looking at the state after each tactic:
27+
28+.. list-table::
29+
30+ * - Start with the type signature like this:
31+ - .. code-block:: idris
32+
33+ %language ElabReflection
34+
35+ idNat : Nat -> Nat
36+ idNat = %runElab (do
37+
38+ * - In order to investigate how the program works this table shows the proof state at each stage as the tactics are applied. So here is the proof state at the start:
39+ - .. image:: ../image/elabProofStateEx1_1.png
40+ :width: 310px
41+ :height: 115px
42+
43+ * - This table shows the hole types and what they depend on. The aim is to illustrate the types by analogy with proofs, as a line with the premises above it and the conclusion below it.
44+ - .. image:: ../image/elabLogicEx1_1.png
45+ :width: 277px
46+ :height: 15px
47+
48+ * - The term is:
49+ - ?{hole_0} ≈ ? {hole_2} . {hole_2} . {hole_0}
50+
51+ * - It is possible to read the state from the script by calling getEnv, getGoal and getHoles.
52+
53+ - The output of these calls contain structures with TT code. To show the results I hacked this: `my code`_. TT code is not really designed to be readable by humans, all the names are fully expanded, everything has a type down to universes (type of types). This is shown here to illustrate the information available.
54+
55+ .. code-block:: idris
56+
57+ getEnv=[]
58+
59+ getGoal=(hole_2, __pi_arg:(Nat.["Nat", "Prelude"]:{
60+ type constructor tag=8 number=0}.Type:U=(20:./Prelude/Nat.idr)->.
61+ {name ref{type constructor tag=8 number=0}Nat.["Nat","Prelude"]:
62+ Type:U=(20:./Prelude/Nat.idr)
63+ })
64+ })
65+
66+ getHoles=[{hole_2},{hole_0}]
67+
68+ * - getGuess
69+ - error no guess
70+
71+ * - Introduce a lambda binding around the current hole and focus on the body.
72+ - intro \`{{x}}
73+
74+ * - The state now looks like this:
75+ - .. image:: ../image/elabProofStateEx1_2.png
76+ :width: 312px
77+ :height: 84px
78+
79+ * - The hole types now looks like this:
80+ - .. image:: ../image/elabLogicEx1_2.png
81+ :width: 279px
82+ :height: 26px
83+
84+ * - The term now looks like this:
85+ - ?{hole_0} ≈ λ x . ? {hole_2} . {hole_2} . {hole_0}
86+
87+ * - Again we can check the state by calling getEnv, getGoal and getHoles: see `my code`_
88+
89+ - .. code-block:: idris
90+
91+ getEnv=[(x, {λ (Nat.["Nat", "Prelude"]:{
92+ type constructor tag=8 number=0}).
93+ Type:U=(20:./Prelude/Nat.idr)
94+ })]
95+
96+ getGoal=(hole_2, {name ref{type constructor tag=8 number=0}
97+ Nat.["Nat","Prelude"]:Type:U=(20:./Prelude/Nat.idr)
98+ })
99+
100+ getHoles=[{hole_2},{hole_0}]
101+
102+ * - getGuess
103+ - error no guess
104+
105+ * - Place a term into a hole, unifying its type
106+ - fill (Var \`{{x}})
107+
108+ * - The state still looks like this:
109+ - .. image:: ../image/elabProofStateEx1_3.png
110+ :width: 312px
111+ :height: 57px
112+
113+ * - The hole types now looks like this:
114+ - .. image:: ../image/elabLogicEx1_3.png
115+ :width: 290px
116+ :height: 26px
117+
118+ * - The term now looks like this:
119+ - ?{hole_0} ≈ λ x . ?{hole_2} ≈ x . {hole_2} . {hole_0}
120+
121+ * - Again we can check the state by calling getEnv, getGoal and getHoles: see `my code`_
122+
123+ - .. code-block:: idris
124+
125+ getEnv=[(x, {λ (Nat.["Nat", "Prelude"]:
126+ {type constructor tag=8 number=0}).
127+ Type:U=(20:./Prelude/Nat.idr)
128+ })]
129+
130+ getGoal=(hole_2, {name ref{type constructor tag=8 number=0}
131+ Nat.["Nat","Prelude"]:Type:U=(20:./Prelude/Nat.idr)
132+ })
133+
134+ getHoles=[{hole_2}, {hole_0}]
135+
136+ * - getGuess
137+ - .. code-block:: idris
138+
139+ {name ref bound x:
140+ {name ref{type constructor tag=8 number=0}
141+ Nat.["Nat","Prelude"]:Type:U=(20:./Prelude/Nat.idr)
142+ }
143+ }
144+
145+ * - Substitute a guess into a hole.
146+ - solve
147+
148+ * - The hole types now looks like this:
149+ - .. image:: ../image/elabLogicEx1_4.png
150+ :width: 131px
151+ :height: 14px
152+
153+ * - The term now looks like this:
154+ - ?{hole_0} ≈ λ x . x . {hole_0}
155+
156+ * - getEnv
157+
158+ getGoal
159+
160+ getHoles
161+
162+ - .. code-block:: idris
163+
164+ getEnv=[]
165+
166+ getGoal=(hole_0, __pi_arg:(Nat.["Nat", "Prelude"]:{
167+ type constructor tag=8 number=0}.
168+ Type:U=(20:./Prelude/Nat.idr)
169+ ->.{name ref
170+ {type constructor tag=8 number=0}
171+ Nat.["Nat","Prelude"]:Type:U=(20:./Prelude/Nat.idr)
172+ })
173+ })
174+
175+ getHoles=[{hole_0}]
176+
177+ * - getGuess
178+ - .. code-block:: idris
179+
180+ x:({λ (Nat.["Nat", "Prelude"]:{
181+ type constructor tag=8 number=0}).
182+ Type:U=(20:./Prelude/Nat.idr)
183+ }.{
184+ name ref bound
185+ x:{name ref {type constructor tag=8 number=0}
186+ Nat.["Nat","Prelude"]:Type:U=(20:./Prelude/Nat.idr)
187+ }
188+ })
189+ }
190+
191+.. target-notes::
192+.. _`my code`: https://github.com/martinbaker/Idris-dev/blob/uglyTTPrinter/libs/prelude/Language/Reflection/TTPrinter.idr
docs/elaboratorReflection/generatingData.rstnew file+385
@@ -0,0 +1,385 @@
1+Generating Datatypes and Functions at Compile Time
2+==================================================
3+
4+Program elements, such as datatypes and functions can be constructed at compile-time in the Elab monad.
5+This can allow proofs to be generated for user defined types or it could allow types to be automatically generated to support user defined types.
6+An example is the code, from `Elaborator reflection: extending Idris in Idris`_, that automatically generates accessibility predicates using the Bove-Capretta method.
7+
8+Generating Datatypes
9+--------------------
10+
11+There are two main 'tactics' associated with generating datatypes:
12+
13+- declareDatatype
14+- defineDatatype
15+
16+Which declare and define the datatype as the names suggest.
17+
18+.. list-table::
19+
20+ * - These 'tactics' and the data structures associated with them are listed in the tables later on this page, for now, here is a summary:
21+ - .. image:: ../image/generateDatatype.png
22+ :width: 332px
23+ :height: 246px
24+ :alt: diagram illustrating data structures associated with declareDatatype defineDatatype.
25+
26+.. list-table::
27+
28+ * - As a first example, the following boolean-like type can be constructed. When the compiler has run it will be available to us as if we had compiled it in the usual way:
29+ - .. code-block:: idris
30+
31+ λΠ> :printdef Two
32+ data Two : Type where
33+ F : Two
34+ T : Two
35+
36+This was generated by the following code:
37+
38+.. code-block:: idris
39+
40+ module TwoDef
41+ %language ElabReflection
42+
43+ addTwo : Elab ()
44+ addTwo = do let twoname : TTName = `{{TwoDef.Two}}
45+ let F2 = `{{TwoDef.F}}
46+ let T2 = `{{TwoDef.T}}
47+ declareDatatype $ Declare twoname [] `(Type)
48+ defineDatatype $ DefineDatatype twoname [
49+ Constructor `{{F}} [] (Var `{{TwoDef.Two}}),
50+ Constructor `{{T}} [] (Var `{{TwoDef.Two}})
51+ ]
52+
53+ %runElab addTwo
54+
55+.. list-table::
56+
57+ * - The constructors T and F can be called as would be expected:
58+ - .. code-block:: idris
59+
60+ λΠ> F
61+ F : Two
62+ λΠ> T
63+ T : Two
64+
65+Generating Functions
66+--------------------
67+
68+There are two main 'tactics' associated with generating functions:
69+
70+- declareType
71+- defineFunction
72+
73+Which declare and define the function as the names suggest.
74+
75+.. list-table::
76+
77+ * - These 'tactics' and the data structures associated with them are listed in the tables later on this page, for now, here is a summary:
78+ - .. image:: ../image/generateFunction.png
79+ :width: 332px
80+ :height: 246px
81+ :alt: diagram illustrating data structures associated with function declare and define.
82+
83+Note: The left hand side (lhs) and right hand side (rhs) of FunClause typically is of type 'Raw'.
84+
85+.. list-table::
86+
87+ * - Bound pattern variables are represented by 'PVar' binders:
88+ This diagram shows an example of a possible Raw structure that might be used in a function definition.
89+ - .. image:: ../image/generateFunction2.png
90+ :width: 264px
91+ :height: 239px
92+ :alt: diagram illustrating data structures associated with functions.
93+
94+.. list-table::
95+
96+ * - Some function definitions can now be added to the above datatype. This is what they will look like:
97+ - .. code-block:: idris
98+
99+ λΠ> :printdef perm1
100+ perm1 : Two -> Two
101+ perm1 F = F
102+ perm1 T = T
103+ λΠ> :printdef perm2
104+ perm2 : Two -> Two
105+ perm1 F = T
106+ perm1 T = F
107+
108+This was generated with the following code:
109+
110+.. code-block:: idris
111+
112+ let perm1 = `{{TwoDef.perm1}}
113+ declareType (Declare perm1 [MkFunArg `{{code}} (Var twoname) Explicit NotErased] (Var twoname))
114+ defineFunction $ DefineFun perm1 [
115+ MkFunClause (RApp (Var perm1) (Var `{{TwoDef.F}})) (Var F2),
116+ MkFunClause (RApp (Var perm1) (Var `{{TwoDef.T}})) (Var T2)
117+ ]
118+
119+ let perm2 = `{{TwoDef.perm2}}
120+ declareType (Declare perm2 [MkFunArg `{{code}} (Var twoname) Explicit NotErased] (Var twoname))
121+ defineFunction $ DefineFun perm2 [
122+ MkFunClause (RApp (Var perm1) (Var `{{TwoDef.F}})) (Var T2),
123+ MkFunClause (RApp (Var perm1) (Var `{{TwoDef.T}})) (Var F2)
124+ ]
125+
126+.. list-table::
127+
128+ * - This is what happens when we call the functions:
129+ - .. code-block:: idris
130+
131+ λΠ> perm1 F
132+ F : Two
133+ λΠ> perm1 T
134+ T : Two
135+ λΠ> perm2 F
136+ T : Two
137+ λΠ> perm2 T
138+ F : Two
139+
140+So far these datatypes and functions could have been written, statically, in the usual way. However, it is possible to imagine situations where we may need a lot of functions to be generated automatically at compile time. For example, if we extend this Boolean datatype to a datatype with more simple constructors (a finite set), we could generate a function for every possible permutation of that datatype back to itself.
141+
142+A Different Example which has Type Parameters
143+---------------------------------------------
144+
145+.. list-table::
146+
147+ * - Here is an example of a datatype with type parameters:
148+ - .. code-block:: idris
149+
150+ data N : Nat -> Type where
151+ MkN : N x
152+ MkN' : (x : Nat) -> N (S x)
153+
154+This was produced by the following code:
155+
156+.. code-block:: idris
157+
158+ module DataDef
159+ %language ElabReflection
160+
161+ addData : Elab ()
162+ addData = do
163+ let dataname : TTName = `{{DataDef.N}}
164+ declareDatatype $ Declare dataname [MkFunArg `{{n}} `(Nat) Explicit NotErased] `(Type)
165+ defineDatatype $ DefineDatatype dataname [
166+ Constructor `{{MkN}} [MkFunArg `{{x}} `(Nat) Implicit NotErased]
167+ (RApp (Var dataname) (Var `{{x}})),
168+ Constructor `{{MkN'}} [MkFunArg `{{x}} `(Nat) Explicit NotErased]
169+ (RApp (Var dataname) (RApp (Var `{S}) (Var `{{x}})))
170+ ]
171+
172+ %runElab addData
173+
174+So this declares and defines the following data structure 'N' with a constructor 'MkN' which can have an implicit or an explicit Nat argument. Which can be used like this:
175+
176+.. code-block:: idris
177+
178+ λΠ> :t N
179+ N : Nat -> Type
180+ λΠ> N 2
181+ N 2 : Type
182+ λΠ> N 0
183+ N 0 : Type
184+ λΠ> :t MkN
185+ MkN : N x
186+
187+Table of 'tactics' for Generating Data and Functions
188+----------------------------------------------------
189+
190+These are the functions that we can use to create data and functions in the Elab monad:
191+
192+.. list-table::
193+ :widths: 10 30
194+ :stub-columns: 1
195+
196+ * - declareType
197+ - Add a type declaration to the global context.
198+
199+ Signature:
200+
201+ declareType : TyDecl -> Elab ()
202+ * - defineFunction
203+ - Define a function in the global context. The function must have already been declared, either in ordinary Idris code or using `declareType`.
204+
205+ Signature:
206+
207+ defineFunction : FunDefn Raw -> Elab ()
208+
209+ * - declareDatatype
210+ - Declare a datatype in the global context. This step only establishes the type constructor; use `defineDatatype` to give it constructors.
211+
212+ Signature:
213+
214+ declareDatatype : TyDecl -> Elab ()
215+
216+ * - defineDatatype
217+ - Signature:
218+
219+ defineDatatype : DataDefn -> Elab ()
220+
221+ * - addImplementation
222+ - Register a new implementation for interface resolution.
223+
224+ Arguments:
225+
226+ - ifaceName the name of the interface for which an implementation is being registered
227+ - implName the name of the definition to use in implementation search
228+
229+ Signature:
230+
231+ addImplementation : (ifaceName, implName : TTName) -> Elab ()
232+
233+ * - isTCName
234+ - Determine whether a name denotes an interface.
235+
236+ Arguments:
237+
238+ - name - a name that might denote an interface.
239+
240+ Signature:
241+
242+ isTCName : (name : TTName) -> Elab Bool
243+
244+Table of Datatypes Associated with Generating Data and Functions
245+----------------------------------------------------------------
246+
247+The above functions use the following data/records:
248+
249+.. list-table::
250+ :widths: 10 30
251+ :stub-columns: 1
252+
253+ * - Plicity
254+ - How an argument is provided in high-level Idris
255+
256+ .. code-block:: idris
257+
258+ data Plicity=
259+ ||| The argument is directly provided at the application site
260+ Explicit |
261+ ||| The argument is found by Idris at the application site
262+ Implicit |
263+ ||| The argument is solved using interface resolution
264+ Constraint
265+
266+ * - FunArg
267+ - Function arguments
268+
269+ These are the simplest representation of argument lists, and are used for functions. Additionally, because a FunArg provides enough
270+ information to build an application, a generic type lookup of a top-level identifier will return its FunArgs, if applicable.
271+
272+ .. code-block:: idris
273+
274+ record FunArg where
275+ constructor MkFunArg
276+ name : TTName
277+ type : Raw
278+ plicity : Plicity
279+ erasure : Erasure
280+
281+ * - TyConArg
282+ - Type constructor arguments
283+
284+ Each argument is identified as being either a parameter that is
285+
286+ consistent in all constructors, or an index that varies based on
287+
288+ which constructor is selected.
289+
290+ .. code-block:: idris
291+
292+ data TyConArg =
293+ ||| Parameters are uniform across the constructors
294+ TyConParameter FunArg |
295+ ||| Indices are not uniform
296+ TyConIndex FunArg
297+
298+ * - TyDecl
299+ - A type declaration for a function or datatype
300+
301+ .. code-block:: idris
302+
303+ record TyDecl where
304+ constructor Declare
305+ ||| The fully-qualified name of the function or datatype being declared.
306+ name : TTName
307+ ||| Each argument is in the scope of the names of previous arguments.
308+ arguments : List FunArg
309+ ||| The return type is in the scope of all the argument names.
310+ returnType : Raw
311+
312+ * - FunClause
313+ - A single pattern-matching clause
314+
315+ .. code-block:: idris
316+
317+ data FunClause : Type -> Type where
318+ MkFunClause : (lhs, rhs : a) -> FunClause a
319+ MkImpossibleClause : (lhs : a) -> FunClause a
320+
321+ * - FunDefn
322+ - A reflected function definition.
323+
324+ .. code-block:: idris
325+
326+ record FunDefn a where
327+ constructor DefineFun
328+ name : TTName
329+ clauses : List (FunClause a)
330+
331+ * - ConstructorDefn
332+ - A constructor to be associated with a new datatype.
333+
334+ .. code-block:: idris
335+
336+ record ConstructorDefn where
337+ constructor Constructor
338+ ||| The name of the constructor. The name must _not_ be qualified -
339+ ||| that is, it should begin with the `UN` or `MN` constructors.
340+ name : TTName
341+ ||| The constructor arguments. Idris will infer which arguments are
342+ ||| datatype parameters.
343+ arguments : List FunArg
344+ ||| The specific type constructed by the constructor.
345+ returnType : Raw
346+
347+ * - DataDefn
348+ - A definition of a datatype to be added during an elaboration script.
349+
350+ .. code-block:: idris
351+
352+ record DataDefn where
353+ constructor DefineDatatype
354+ ||| The name of the datatype being defined. It must be
355+ ||| fully-qualified, and it must have been previously declared as a
356+ ||| datatype.
357+ name : TTName
358+ ||| A list of constructors for the datatype.
359+ constructors : List ConstructorDefn
360+
361+ * - CtorArg
362+ - CtorParameter
363+
364+ .. code-block:: idris
365+
366+ data CtorArg = CtorParameter FunArg | CtorField FunArg
367+
368+ * - Datatype
369+ - A reflected datatype definition
370+
371+ .. code-block:: idris
372+
373+ record Datatype where
374+ constructor MkDatatype
375+ ||| The name of the type constructor
376+ name : TTName
377+ ||| The arguments to the type constructor
378+ tyConArgs : List TyConArg
379+ ||| The result of the type constructor
380+ tyConRes : Raw
381+ ||| The constructors for the family
382+ constructors : List (TTName, List CtorArg, Raw)</td>
383+
384+.. target-notes::
385+.. _`Elaborator reflection: extending Idris in Idris`: https://dl.acm.org/citation.cfm?doid=2951913.2951932
docs/elaboratorReflection/holes.rstnew file+196
@@ -0,0 +1,196 @@
1+Elaborator Reflection - Holes
2+=============================
3+
4+The process of doing proofs and elaborator reflection tends to involve stating with a desired conclusion and working back to known premises. This often needs intermediate sub-goals which may only be partially solved, these are encoded using 'holes' and 'guesses'.
5+
6+* A hole is a term (an expression - a chunk of code) which is yet to be determined. We do have information about its type (this process tends to be type driven).
7+* A guess is like a hole that is not yet bound.
8+
9+The theory around this was developed in `Dependently Typed Functional Programs and their Proofs by McBride 1999`_.
10+
11+Notation for Holes and Guesses
12+------------------------------
13+
14+There is a notation used in the McBride 1999 thesis which is adapted for the TT language. When working on elaborator reflection it is useful to know this notation, for instance when reading the output of the 'debug' tactic.
15+
16+* A focused hole is notated like this ?x:t . t
17+* A guess is notated like this ?x ≈ t:t . t
18+
19+The following example shows how this is used:
20+
21+Simple Example
22+--------------
23+
24+Start with a code file that just contains:
25+
26+.. code-block:: idris
27+
28+ %language ElabReflection
29+
30+ testFn : Nat
31+ testFn = %runElab (do debug {a = ()})
32+
33+when this is loaded the following is displayed:
34+
35+.. code-block:: idris
36+
37+ Holes:
38+ ----------------------------------
39+ {hole_2} : Prelude.Nat.Nat
40+
41+ ----------------------------------
42+ {hole_0} : Prelude.Nat.Nat
43+
44+ Term:
45+ ?{hole_0} ≈ ? {hole_2} . {hole_2} . {hole_0}
46+
47+This shows information about the state when debug is encountered, during tactic execution, which allows us to investigate what is happening at each stage.
48+
49+* The "Holes" part shows the types of the holes and the local context of each
50+* The "Term" part shows where these holes are in the expression being constructed.
51+
52+So starting with the "Term" part we have.
53+
54+.. code-block:: idris
55+
56+ ?{hole_0} ≈ ? {hole_2} . {hole_2} . {hole_0}
57+
58+.. sidebar:: attack tactic
59+
60+ This kind of thing tends to arise from "attack", which helps keep binding forms in order.
61+
62+The meaning of this is not immediately apparent so it helps to add some parentheses to make the structure clearer:
63+
64+.. code-block:: idris
65+
66+ (?{hole_0} ≈ (? {hole_2} . {hole_2}) . {hole_0})
67+
68+First lets look at the inner part:
69+
70+.. code-block:: idris
71+
72+ ? {hole_2} . {hole_2}
73+
74+We can substitute in the type from the "Holes" part:
75+
76+.. code-block:: idris
77+
78+ ? {hole_2}:Nat . {hole_2}:Nat
79+
80+So we are looking for a hole of type Nat and all we know is it has type Nat.
81+
82+Going back to the full term, the above is wrapped in a guess, so it means: 'a guess that is itself a hole'.
83+
84+Since the elaborator does not have any further information it has to be given a value:
85+
86+.. code-block:: idris
87+
88+ %language ElabReflection
89+
90+ testFn : Nat
91+ testFn = %runElab (do fill `(Z)
92+ debug {a = ()}
93+ solve)
94+
95+Now we have a guess for hole_2 which is itself a guess for hole_0:
96+
97+.. code-block:: idris
98+
99+ ?{hole_0} ≈ ?{hole_2} ≈ Prelude.Nat.Z . {hole_2} . {hole_0}
100+
101+The guesses can be accepted by calling the 'solve' tactic.
102+
103+Example Showing Patterns
104+------------------------
105+
106+In this next example a parameter 'n' has been added to the function. This allows us to see how patterns are used. Starting with this file:
107+
108+.. code-block:: idris
109+
110+ %language ElabReflection
111+
112+ testFn : Nat -> Nat
113+ testFn n = %runElab (do debug {a = ()})
114+
115+when loaded gives:
116+
117+.. code-block:: idris
118+
119+ Holes:
120+ n : Prelude.Nat.Nat
121+ ----------------------------------
122+ {hole_3} : Prelude.Nat.Nat
123+
124+ n : Prelude.Nat.Nat
125+ ----------------------------------
126+ {hole_1} : Prelude.Nat.Nat
127+
128+ ----------------------------------
129+ {hole_0} : patTy n : Prelude.Nat.Nat . Prelude.Nat.Nat
130+
131+ Term:
132+ ?{hole_0} ≈ pat n : Prelude.Nat.Nat .
133+ ?{hole_1} ≈ ? {hole_3} . {hole_3} . {hole_1} .
134+ {hole_0}
135+
136+The ns above the lines show the context of the holes on the right hand side - they include the variable n that is an argument!
137+
138+patTy is a binding form in Idris's core language that introduces a pattern variable. The idea is that the left-hand side and right-hand side of each pattern should have the same type. Because pattern variables may occur multiple times on either side of the equation, we can achieve this by documenting their types with a binding form that wraps each side. This new binding form is why an "attack" was necessary prior to elaborating the RHS.
139+
140+patTy is a type former, and pat is the corresponding introduction form. So you can think of patTy as being a bit like a dependent function type, and pat as being a bit like lambda, except they don't introduce functions (they instead are used for pattern-matching definitions).
141+
142+More Complicated Example
143+------------------------
144+
145+This example does not introduce any new notation but the extra complexity gives a more realistic idea of how it is used. Here we start with this file:
146+
147+.. code-block:: idris
148+
149+ %language ElabReflection
150+
151+ testFn : (n : Nat) -> (n = plus n Z) -> (S n = S (plus n Z))
152+ testFn k ih = %runElab (do debug {a = ()})
153+
154+when loaded gives:
155+
156+.. code-block:: idris
157+
158+ Holes:
159+ k : Prelude.Nat.Nat
160+ ih : = Prelude.Nat.Nat Prelude.Nat.Nat k
161+ (Prelude.Nat.plus k Prelude.Nat.Z)
162+ ----------------------------------
163+ {hole_4} : = Prelude.Nat.Nat Prelude.Nat.Nat (Prelude.Nat.S k)
164+ (Prelude.Nat.S (Prelude.Nat.plus k Prelude.Nat.Z))
165+
166+ k : Prelude.Nat.Nat
167+ ih : = Prelude.Nat.Nat Prelude.Nat.Nat k
168+ (Prelude.Nat.plus k Prelude.Nat.Z)
169+ ----------------------------------
170+ {hole_2} : = Prelude.Nat.Nat Prelude.Nat.Nat (Prelude.Nat.S k)
171+ (Prelude.Nat.S (Prelude.Nat.plus k Prelude.Nat.Z))
172+
173+ k : Prelude.Nat.Nat
174+ ----------------------------------
175+ {hole_1} : patTy ih : = Prelude.Nat.Nat Prelude.Nat.Nat k
176+ (Prelude.Nat.plus k Prelude.Nat.Z) .
177+ = Prelude.Nat.Nat Prelude.Nat.Nat (Prelude.Nat.S k)
178+ (Prelude.Nat.S (Prelude.Nat.plus k Prelude.Nat.Z))
179+
180+ ----------------------------------
181+ {hole_0} : patTy k : Prelude.Nat.Nat .
182+ patTy ih : = Prelude.Nat.Nat Prelude.Nat.Nat k
183+ (Prelude.Nat.plus k Prelude.Nat.Z) .
184+ = Prelude.Nat.Nat Prelude.Nat.Nat (Prelude.Nat.S k)
185+ (Prelude.Nat.S (Prelude.Nat.plus k Prelude.Nat.Z))
186+
187+ Term:
188+ ?{hole_0} ≈ pat k : Prelude.Nat.Nat .
189+ ?{hole_1} ≈ pat ih : = Prelude.Nat.Nat Prelude.Nat.Nat k
190+ (Prelude.Nat.plus k Prelude.Nat.Z) .
191+ ?{hole_2} ≈ ? {hole_4} . {hole_4} . {hole_2} .
192+ {hole_1} .
193+ {hole_0}
194+
195+.. target-notes::
196+.. _`Dependently Typed Functional Programs and their Proofs by McBride 1999`: https://www.era.lib.ed.ac.uk/handle/1842/374
docs/elaboratorReflection/index.rstnew file+27
@@ -0,0 +1,27 @@
1+.. _elaborator-index:
2+
3+#####################
4+Elaborator Reflection
5+#####################
6+
7+A tutorial on theorem proving in Idris.
8+
9+.. note::
10+
11+ The documentation for Idris has been published under the Creative
12+ Commons CC0 License. As such to the extent possible under law, *The
13+ Idris Community* has waived all copyright and related or neighboring
14+ rights to Documentation for Idris.
15+
16+ More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
17+
18+.. toctree::
19+ :maxdepth: 1
20+
21+ elaborator-reflection
22+ elabReflection
23+ tactics
24+ holes
25+ example1
26+ primitive
27+ generatingData
docs/elaboratorReflection/primitive.rstnew file+518
@@ -0,0 +1,518 @@
1+Primitive Operators
2+===================
3+
4+.. list-table::
5+ :widths: 10 30
6+ :stub-columns: 1
7+
8+ * - gensym
9+ - Generate a unique name based on some hint.
10+
11+ Useful when establishing a new binder.
12+
13+ **NB**: the generated name is unique **for this run of the elaborator**.
14+
15+ Do not assume that they are globally unique.
16+
17+ Signature:
18+
19+ gensym : (hint : String) -> Elab TTName
20+
21+ * - solve
22+ - Substitute a guess into a hole.
23+
24+
25+ .. image:: ../image/solve.png
26+ :width: 141px
27+ :height: 74px
28+ :alt: diagram illustrating solve tactic
29+
30+
31+ Substitute the focused guess throughout its scope, eliminating it and moving focus to the next element of the hole queue. Fail if the focus is not a guess.
32+
33+ Signature:
34+
35+ solve : Elab ()
36+
37+ Example:
38+
39+ .. code-block:: idris
40+
41+ %language ElabReflection
42+
43+ testFn : Nat
44+ testFn = %runElab (do fill `(Z)
45+ solve)
46+
47+ * - fill
48+ - Place a term into a hole, unifying its type. Fails if the focus is not a hole.
49+
50+
51+ .. image:: ../image/fill.png
52+ :width: 140px
53+ :height: 74px
54+ :alt: diagram illustrating fill tactic
55+
56+
57+ Signature:
58+
59+ fill : (e : Raw) -> Elab ()
60+
61+ Place a term e with type tc into the focused hole:
62+
63+ ?h : th.e'
64+
65+ and convert it to a guess:
66+
67+ ?h ≈ e:t.e'
68+
69+ and fail if the current focus is not a hole. The type t of the guess is constructed by unifying tc and th, which may instantiate holes that they refer to. Fail if the current focus is not a hole or if unification fails.
70+
71+ This unification can result in the solution of further holes or the establishment of additional unsolved unification constraints.
72+
73+ Example:
74+
75+ .. code-block:: idris
76+
77+ %language ElabReflection
78+
79+ testFn : Nat
80+ testFn = %runElab (do fill `(Z)
81+ solve)
82+
83+ * - apply
84+ - Attempt to apply an operator to fill the current hole, potentially solving arguments by unification.
85+
86+ A hole is established for each argument.
87+
88+ The return value is the list of holes established for the arguments to the function.
89+
90+ Note that not all of the returned hole names still exist, as they may have been solved.
91+
92+ - @ op the term to apply
93+ - @ argSpec - A list of booleans, one for each argument that the operator will be applied to. If true then attempt to solve the argument by unification.
94+
95+ Signature:
96+
97+ apply : (op : Raw) -> (argSpec : List Bool) -> Elab (List TTName)
98+
99+ Example: elaborating an application of a function f that takes one implicit and two explicit arguments might invoke:
100+
101+ apply \`(f) [False, True, True]
102+
103+ Here is an example of an elab script that uses apply to insert the term plus Z (S Z) into a goal of type Nat.
104+
105+ .. code-block:: idris
106+
107+ do [x,y] <- apply `(plus) [False, False]
108+ solve
109+ focus x; fill `(Z); solve
110+ focus y; fill `(S Z); solve
111+
112+ The names of the established holes are returned.
113+
114+ Note: This was added to the original tactic language to allow elaborator reflection.
115+
116+ * - matchApply
117+ - Attempt to apply an operator to fill the current hole, potentially solving arguments by matching.
118+
119+ The return value is the list of holes established for the arguments to the function.
120+
121+ Note that not all of the returned hole names still exist, as they may have been solved.
122+
123+ - @ op the term to apply
124+ - @ argSpec instructions for finding the arguments to the term, where the Boolean states whether or not to attempt to solve the argument by matching.
125+
126+ Signature:
127+
128+ matchApply : (op : Raw) -> (argSpec : List Bool) -> Elab (List TTName)
129+
130+ * - focus
131+ - Move the focus to the specified hole, bringing it to the front of the hole queue. Fails if the hole does not exist.
132+
133+ @ hole the hole to focus on
134+
135+ Signature:
136+
137+ focus : (hole : TTName) -> Elab ()
138+
139+ * - unfocus
140+ - Send the currently-focused hole to the end of the hole queue and focus on the next hole.
141+
142+ Signature:
143+
144+ unfocus : TTName -> Elab ()
145+
146+ * - attack
147+ - Convert a hole to make it suitable for bindings.
148+
149+
150+ .. image:: ../image/attack.png
151+ :width: 152px
152+ :height: 70px
153+ :alt: diagram illustrating attack tactic
154+
155+
156+ The binding tactics require that a hole be directly under its binding, or else the scopes of the generated terms won't make sense. This tactic creates a new hole of the proper form, and points the old hole at it.
157+
158+ Signature:
159+
160+ attack : Elab ()
161+
162+ * - claim
163+ - Establish a new hole binding named n with type t, surrounding the current focus.
164+
165+ Introduce a new hole with a specified name and type.
166+
167+ The new hole will be focused, and the previously-focused hole will be immediately after it in the hole queue. Because this tactic introduces a new binding, you may need to 'attack' first.
168+
169+ Signature:
170+
171+ claim : TTName -> Raw -> Elab ()
172+
173+ * - patvar
174+ - Convert a hole into a pattern variable.
175+
176+ Signature:
177+
178+ patvar : TTName -> Elab ()
179+
180+ * - compute
181+ - Normalise the goal.
182+
183+ Often this is not necessary because normanisation is applied during other tactics.
184+
185+ Signature:
186+
187+ compute : Elab ()
188+
189+ * - normalise
190+ - Normalise a term in some lexical environment
191+
192+ - @ env the environment in which to compute (get one of these from `getEnv`)
193+ - @ term the term to normalise
194+
195+ Signature:
196+
197+ normalise : (env : List (TTName, Binder TT)) -> (term : TT) -> Elab TT
198+
199+ * - whnf
200+ - Reduce a closed term to weak-head normal form
201+
202+ @ term the term to reduce
203+
204+ Signature:
205+
206+ whnf : (term : TT) -> Elab TT
207+
208+ * - convertsInEnv
209+ - Check that two terms are convertible in the current context and in some environment.
210+
211+ - @ env a lexical environment to compare the terms in (see `getEnv`)
212+ - @ term1 the first term to convert
213+ - @ term2 the second term to convert
214+
215+ Signature:
216+
217+ convertsInEnv : (env : List (TTName, Binder TT)) -> (term1, term2 : TT) -> Elab ()
218+
219+ * - converts
220+ - Check that two terms are convertable in the current context and environment
221+
222+ - @ term1 the first term to convert
223+ - @ term2 the second term to convertconverts : (term1, term2 : TT) -> Elab ()
224+
225+ converts term1 term2 = convertsInEnv !getEnv term1 term2
226+
227+ * - getSourceLocation
228+ - Find the source context for the elaboration script
229+
230+ Signature:
231+
232+ getSourceLocation : Elab SourceLocation
233+
234+ * - sourceLocation
235+ - Attempt to solve the current goal with the source code
236+
237+ locationsourceLocation : Elab ()
238+
239+ .. code-block:: idris
240+
241+ sourceLocation = do loc <- getSourceLocation
242+ fill (quote loc)
243+ solve
244+
245+ * - currentNamespace
246+ - Get the current namespace at the point of tactic execution. This allows scripts to define top-level names conveniently.
247+
248+ The namespace is represented as a reverse-order list of strings, just as in the representation of names.
249+
250+ Signature:
251+
252+ currentNamespace : Elab (List String)
253+
254+ * - rewriteWith
255+ - Attempt to rewrite the goal using an equality.
256+
257+ The tactic searches the goal for applicable subterms, and constructs a context for `replace` using them. In some cases, this is not possible, and `replace` must be called manually with an appropriate context.
258+
259+ Because this tactic internally introduces a `let` binding, it requires that the hole be immediately under its binder (use 'attack' if it might not be).
260+
261+ Signature:
262+
263+ rewriteWith : Raw -> Elab ()
264+
265+ * - resolveTC
266+ - Attempt to solve the current goal with an interface dictionary
267+
268+ @ fn the name of the definition being elaborated (to prevent Idris from looping)
269+
270+ Signature:
271+
272+ resolveTC : (fn : TTName) -> Elab ()
273+
274+ * - search
275+ - Use Idris's internal proof search.
276+
277+ Signature:
278+
279+ search : Elab ()
280+
281+ * - search'
282+ - Use Idris's internal proof search, with more control.
283+
284+ - @ depth the search depth
285+ - @ hints additional names to try
286+
287+ Signature:
288+
289+ search' : (depth : Int) -> (hints : List TTName) -> Elab ()
290+
291+ * - operatorFixity
292+ - Look up the declared fixity for an operator.
293+
294+ The lookup fails if the operator does not yet have a fixity or if the string is not a valid operator.
295+
296+ @ operator the operator string to look up
297+
298+ Signature:
299+
300+ operatorFixity : (operator : String) -> Elab Fixity
301+
302+ * - debug
303+ - Halt elaboration, dumping the internal state for inspection.
304+
305+ This is intended for elaboration script developers, not for end-users. Use `fail` for final scripts.
306+
307+ Signature:
308+
309+ debug : Elab a
310+
311+ If 'debug' is not the last tactic then make sure its type is sufficiently constrained. In particular, its type is Elab a, but there's no way for Idris to find out which type was meant for a. This can be fixed by either writing an explicit type (e.g. debug {a = ()}) or by using a helper that constrains the type (such as simple in Pruviloj, e.g. simple debug as a line).
312+
313+ .. code-block:: idris
314+
315+ %language ElabReflection
316+
317+ idNat : Nat -> Nat
318+ idNat = %runElab (do intro `{{x}}
319+ debug {a = ()}
320+ fill (Var `{{x}})
321+ solve)
322+
323+ * - debugMessage
324+ - Halt elaboration, dumping the internal state and displaying a message.
325+
326+ This is intended for elaboration script developers, not for end-users. Use `fail` for final scripts.
327+
328+ @ msg the message to display
329+
330+ Signature:
331+
332+ debugMessage : (msg : List ErrorReportPart) -> Elab a
333+
334+ If 'debugMessage' is not the last tactic then make sure its type is sufficiently constrained. In particular, its type is Elab a, but there's no way for Idris to find out which type was meant for a. This can be fixed by either writing an explicit type (e.g. debugMessage [TextPart "message"] {a = ()}) or by using a helper that constrains the type (such as simple in Pruviloj, e.g. simple debug as a line).
335+
336+ .. code-block:: idris
337+
338+ %language ElabReflection
339+ idNat : Nat -> Nat
340+ idNat = %runElab (do intro `{{x}}
341+ debugMessage [TextPart "error message"] {a = ()}
342+ fill (Var `{{x}})
343+ solve)
344+
345+ * - metavar
346+ - Create a new top-level metavariable to solve the current hole.
347+
348+ @ name the name for the top-level variable
349+
350+ Signature:
351+
352+ metavar : (name : TTName) -> Elab ()
353+
354+ * - runElab
355+ - Recursively invoke the reflected elaborator with some goal.
356+
357+ The result is the final term and its type.
358+
359+ Signature:
360+
361+ runElab : Raw -> Elab () -> Elab (TT, TT)
362+
363+
364+Read and Write State
365+--------------------
366+
367+.. list-table::
368+ :widths: 10 30
369+ :stub-columns: 1
370+
371+ * - getEnv
372+ - Look up the lexical binding at the focused hole. Fails if no holes are present.
373+
374+ Signature:
375+
376+ getEnv : Elab (List (TTName, Binder TT))
377+
378+ * - getGoal
379+ - Get the name and type of the focused hole. Fails if not holes are present.
380+
381+ Signature:
382+
383+ getGoal : Elab (TTName, TT)
384+
385+ * - getHoles
386+ - Get the hole queue, in order.
387+
388+ Signature:
389+
390+ getHoles : Elab (List TTName)
391+
392+ * - getGuess
393+ - If the current hole contains a guess, return it. Otherwise, fail.
394+
395+ Signature:
396+
397+ getGuess : Elab TT
398+
399+ * - lookupTy
400+ - Look up the types of every overloading of a name.
401+
402+ Signature:
403+
404+ lookupTy : TTName -> Elab (List (TTName, NameType, TT))
405+
406+ * - lookupTyExact
407+ - Get the type of a fully-qualified name. Fail if it doesn't resolve uniquely.
408+
409+ Signature:
410+
411+ lookupTyExact : TTName -> Elab (TTName, NameType, TT)
412+
413+ * - lookupDatatype
414+ - Find the reflected representation of all datatypes whose names are overloadings of some name.
415+
416+ Signature:
417+
418+ lookupDatatype : TTName -> Elab (List Datatype)
419+
420+ * - lookupDatatypeExact
421+ - Find the reflected representation of a datatype, given its fully-qualified name. Fail if the name does not uniquely resolve to a datatype.
422+
423+ Signature:
424+
425+ lookupDatatypeExact : TTName -> Elab Datatype
426+
427+ * - lookupFunDefn
428+ - Find the reflected function definition of all functions whose names are overloadings of some name.
429+
430+ Signature:
431+
432+ lookupFunDefn : TTName -> Elab (List (FunDefn TT))
433+
434+ * - lookupFunDefnExact
435+ - Find the reflected function definition of a function, given its fully-qualified name. Fail if the name does not uniquely resolve to a function.
436+
437+ Signature:
438+
439+ lookupFunDefnExact : TTName -> Elab (FunDefn TT)
440+
441+ * - lookupArgs
442+ - Get the argument specification for each overloading of a name.
443+
444+ Signature:
445+
446+ lookupArgs : TTName -> Elab (List (TTName, List FunArg, Raw))
447+
448+ * - lookupArgsExact
449+ - Get the argument specification for a name. Fail if the name does not uniquely resolve.
450+
451+ Signature:
452+
453+ lookupArgsExact : TTName -> Elab (TTName, List FunArg, Raw)
454+
455+ * - check
456+ - Attempt to type-check a term, getting back itself and its type.
457+
458+ - @ env the environment within which to check the type
459+ - @ tm the term to check
460+
461+ Signature:
462+
463+ check : (env : List (TTName, Binder TT)) -> (tm : Raw) -> Elab (TT, TT)
464+
465+Error Handling
466+--------------
467+
468+.. list-table::
469+ :widths: 10 30
470+ :stub-columns: 1
471+
472+ * - tryCatch
473+ - `tryCatch t (\err => t')` will run `t`, and if it fails, roll back the elaboration state and run `t'`,
474+ but with access to the knowledge of why `t` failed.
475+
476+ Signature:
477+
478+ tryCatch : Elab a -> (Err -> Elab a) -> Elab a
479+
480+ .. code-block:: idris
481+
482+ %language ElabReflection
483+
484+ f : Err -> Elab ()
485+ f (Msg _) = fill `("message error")
486+ f (CantUnify _ _ _ _ _ _) = fill `("unification error")
487+ f _ = fill `("other")
488+
489+ s2 : String
490+ s2 = %runElab (do tryCatch (fill `(True)) f ; solve)
491+
492+ * - fail
493+ - Halt elaboration with an error
494+
495+ Signature:
496+
497+ fail : List ErrorReportPart -> Elab a
498+
499+ Note: we may need to make sure the return type 'a' is sufficiently constrained. If required add an explicit type {a = ()}.
500+
501+ Below is some code which includes 'fail'. This will always fail but we could replace 'True' with some more useful condition.
502+
503+ .. code-block:: idris
504+
505+ %language ElabReflection
506+
507+ id1 : Elab ()
508+ id1 = do
509+ intro `{{x}}
510+ fill (Var `{{x}})
511+ if True
512+ then
513+ fail [TextPart "put error message here"]
514+ else
515+ solve
516+
517+ idNat : Nat -> Nat
518+ idNat = %runElab id1
docs/elaboratorReflection/tactics.rstnew file+430
@@ -0,0 +1,430 @@
1+Elaborator Reflection - Tactics
2+===============================
3+
4+The Idris part of the code for elaborator reflection is in
5+Elab.idr `<https://github.com/idris-lang/Idris-dev/blob/master/libs/prelude/Language/Reflection/Elab.idr>`_
6+Before looking at the Elab monad we need to know how to construct terms.
7+
8+
9+Proof State
10+-----------
11+
12+The terminology 'Proof State' is used by analogy to proof assistants but, as used here, it's really more of a metaprogramming state.
13+
14+Tactics operate on the proof state. The proof state contains various pieces of information, at this stage, the important ones for us are:
15+
16+- A hole queue - This contains a list of the names of the holes used in the proof term. The solution to each hole may depend on the other holes. For more information about holes and guesses see `Dependently Typed Functional Programs and their Proofs by McBride 1999`_.
17+- A goal type - The type of the term that is under construction for the current goal.
18+- A possibly incomplete proof term, which is being calculated and should be the goal type at the end of elaboration.
19+- Context - A collection of open unification problems, representing recoverable failures of unification that may yet unify once more variables are solved.
20+
21+There are many other pieces of information in the proof state such as the names used , such as the bodies of case blocks that need to be elaborated.but, for now, we will leave the system to handle these.
22+
23+.. image:: ../image/elabProofState.png
24+ :width: 283px
25+ :height: 232px
26+
27+Names TTName
28+------------
29+
30+Names in an Idris program are evaluated at runtime but sometimes a 'variable name' is needed, which can be referred to as an unevaluated symbol.
31+The names used in terms have different constructors depending on their type:
32+
33++---------------------------+-----------------------------------------------+
34+| UN String | A user-provided name |
35++---------------------------+-----------------------------------------------+
36+| NS (UN "foo") ["B", "A"]) | A name in some namespace |
37++---------------------------+-----------------------------------------------+
38+| MN Int String | Machine-chosen names |
39++---------------------------+-----------------------------------------------+
40+| SN SpecialName | Special names, to make conflicts impossible |
41+| | and language features predictable |
42++---------------------------+-----------------------------------------------+
43+
44+
45+A user defined name can be constructed like this:
46+
47+.. code-block:: idris
48+
49+ Idris> UN "x"
50+ UN "x" : TTName
51+
52+.. code-block:: idris
53+
54+ Idris> NS (UN "x") ["b","a"]
55+ NS (UN "x") ["b", "a"] : TTName
56+
57+.. list-table:: machine-chosen names
58+
59+ * - A machine-chosen name needs to be generated within an Elab monad (see below for details) and is unique within that monad. This produced: {abc_140}{abc_141} so although gensym "abc" was called twice each one had a different integer:
60+ - example of unique names:
61+
62+ .. code-block:: idris
63+
64+ implementation Show TTName where
65+ show (UN s) = "`{{"++s++"}}"
66+ show (NS t a) = "{"++(show t)++
67+ "."++(show a)++"}"
68+ show (MN i s) = "{"++s++"_"++(show i)++"}"
69+ show (SN sn) = "TTName special name"
70+
71+ showGensym : String
72+ showGensym = %runElab (do
73+ debugMessage [TextPart (
74+ show !(gensym "abc") ++
75+ show !(gensym "abc")
76+ )]
77+ )
78+
79+Quasiquotation
80+--------------
81+
82+Since names are used frequently in elaborator reflection there is a shortcut for constructing them:
83+
84+.. list-table::
85+
86+ * - An unresolved variable "x" is wrapped in backtick and double braces:
87+ - .. code-block:: idris
88+
89+ Idris> `{{x}}
90+ UN "x" : TTName
91+
92+
93+ * - Single braces are used for existing variables:
94+ - .. code-block:: idris
95+
96+ Idris> `{x}
97+ No such variable x
98+ Idris> :let x=2
99+ Idris> `{x}
100+ UN "x" : TTName
101+
102+
103+ * - brackets are used for an expression:
104+
105+ here type is inferable
106+ - .. code-block:: idris
107+
108+ Idris> :let a=2
109+ Idris> `(a)
110+ P Ref (UN "a") (TConst (AType (ATInt ITBig))) : TT
111+
112+
113+ * - Expression with explicit type:
114+ - .. code-block:: idris
115+
116+ Idris> `(a:Integer)
117+ P Ref (UN "a") (TConst (AType (ATInt ITBig))) : TT
118+
119+
120+ * - If we want the value we can escape from quasiquotation by using anti-quotation (tilde)
121+ - .. code-block:: idris
122+
123+ Idris> `(~a)
124+ 2 : Integer
125+
126+quasiquotation summary:
127+
128++------------+-----------+----------------------------------------------------------+
129+| |Reification| |
130++============+===========+==========================================================+
131+| \`{{n}} | TTName | Use for new names. Unresolved quotation of the name n. |
132++------------+-----------+----------------------------------------------------------+
133+| \`{n} | TTName | Use for existing names. Resolved quotation of the name |
134+| | | n. n is a reference to a unique name in scope. |
135++------------+-----------+----------------------------------------------------------+
136+| \`(e) | | expression e for which a type is inferable. |
137++------------+-----------+----------------------------------------------------------+
138+| \`(e:t) | | expression e with a given type e. |
139++------------+-----------+----------------------------------------------------------+
140+| ~a | | anti-quotation - sub region which can be evaluated rather|
141+| | | than quoted. |
142++------------+-----------+----------------------------------------------------------+
143+|(Var\`{{x}})| Raw | |
144++------------+-----------+----------------------------------------------------------+
145+
146+TT
147+--
148+
149+There is a notation for a term in TT as it is being constructed (based on a BNF-like grammar), this is used for example in the debug output, it is a compact way to see the state of the term so it is used here.
150+So internally the program is stored as a tree structure using the following syntax:
151+
152++------------+-------+-------------+---------------------------------------------+
153+| | | Syntax | More Information |
154++============+=======+=============+=============================================+
155+| term | | t | |
156++------------+-------+-------------+---------------------------------------------+
157+| binding | | b | |
158++------------+-------+-------------+---------------------------------------------+
159+| constant | t ::= | c | |
160++------------+-------+-------------+---------------------------------------------+
161+| variable | t ::= | x | |
162++------------+-------+-------------+---------------------------------------------+
163+| variable | t ::= | b.t | so a dot '.' tells us this is some sort of |
164+| binding | | | binding. |
165++------------+-------+-------------+---------------------------------------------+
166+| application| t ::= | t t | As with Idris, juxtaposition indicates |
167+| | | | function application. Note: the same symbol |
168+| | | | 't' is used for both terms, this does not |
169+| | | | imply they are the same term. |
170++------------+-------+-------------+---------------------------------------------+
171+| Type | t ::= | T | |
172+| constructor| | | |
173++------------+-------+-------------+---------------------------------------------+
174+| Data | t ::= | C | |
175+| constructor| | | |
176++------------+-------+-------------+---------------------------------------------+
177+| function | b::= | λ c:t | colon ':' separates parameters from body of |
178+| | | | binding. |
179++------------+-------+-------------+---------------------------------------------+
180+| let binding| b::= | let\|-> t:t | |
181++------------+-------+-------------+---------------------------------------------+
182+| function | b::= | ∀ x:t | |
183++------------+-------+-------------+---------------------------------------------+
184+| Type | c::= | \*i | The universe hierarchy is usually handled |
185+| universe | | | automatically so we can just use\* for the |
186+| | | | type of types. |
187++------------+-------+-------------+---------------------------------------------+
188+| integer | c:== | i | |
189+| literal | | | |
190++------------+-------+-------------+---------------------------------------------+
191+|integer type| c:== | Integer | |
192++------------+-------+-------------+---------------------------------------------+
193+| string | c:== | s | |
194+| literal | | | |
195++------------+-------+-------------+---------------------------------------------+
196+| string type| c:== | String | |
197++------------+-------+-------------+---------------------------------------------+
198+|focused hole| | ?x : t | Conor McBride 1999 thesis. |
199++------------+-------+-------------+---------------------------------------------+
200+| guess | | ?x ≈ t : t | Conor McBride 1999 thesis. |
201++------------+-------+-------------+---------------------------------------------+
202+
203+Sometimes the part of the term in focus is underlined.
204+
205+Reflection of the well typed core language
206+
207+.. code-block:: idris
208+
209+ data TT =
210+ ||| A reference to some name (P for Parameter)
211+ P NameType TTName TT |
212+ ||| de Bruijn variables
213+ V Int |
214+ ||| Bind a variable
215+ Bind TTName (Binder TT) TT |
216+ ||| Apply one term to another
217+ App TT TT |
218+ ||| Embed a constant
219+ TConst Const |
220+ ||| Erased terms
221+ Erased |
222+ ||| The type of types along (with universe constraints)
223+ TType TTUExp |
224+ ||| Alternative universes for dealing with uniqueness
225+ UType Universe |
226+
227+TT stores local bound variables using De Bruijn index, when working in Idris this does not concern the user because string names are used for variables. Converting bound variables internally to index values means that the same variable name can be used, in different lambda terms, without ambiguity and without the need for α-substitution.
228+De Bruijn index which is a integer where:
229+
230+- 0=inside current (inner) lambda term
231+- 1= next outer lambda term
232+- 2= next outer and so on
233+
234+Raw
235+---
236+
237+Raw is similar to TT except it is used before types are known. The types should be resolved by the type checker.
238+
239+.. code-block:: idris
240+
241+ data Raw =
242+ ||| Variables, global or local
243+ Var TTName |
244+ ||| Bind a variable
245+ RBind TTName (Binder Raw) Raw |
246+ ||| Application
247+ RApp Raw Raw |
248+ ||| The type of types
249+ RType |
250+ ||| Alternative universes for dealing with uniqueness
251+ RUType Universe |
252+ ||| Embed a constant
253+ RConstant Const |
254+
255+Expression Syntax
256+-----------------
257+
258+There is a way of notating expressions such as those used in the proof state (example: goal type and proof terms) which is reasonably standard in the papers written about this subject.
259+
260+This notation is not entered directly by metaprogrammers but it is seen, for example in debug output. So this notation is explained here because it is useful to be familiar with it.
261+
262+The notation assumes right-associativity, in the absence of brackets, the term to the right binds more tightly than the one on the left.
263+So, for nested lambda terms:
264+
265++---------------+--------+-------------------+
266+| λ a . λ b . f | means | λ a .( λ b . f) |
267++---------------+--------+-------------------+
268+
269+and the same for function application:
270+
271++---------------+--------+-------------------+
272+| f g x | means | f (g x) |
273++---------------+--------+-------------------+
274+
275+In contrast, in lambda calculus, function application is usually regarded as left-associative,
276+Here are some typical examples of the notation used for expressions:
277+
278++-----------------------+
279+| ? {hole_0} . {hole_0} |
280++-----------------------+
281+
282+The term, to be derived, may start off in this state following something like this:
283+
284+.. code-block:: idris
285+
286+ myScript : Elab ()
287+ myScript= do
288+
289+The dot '.' tells us this is some sort of binding.
290+
291++----------------------------------------------+
292+| ?{hole_0} ≈ ? {hole_2} . {hole_2} . {hole_0} |
293++----------------------------------------------+
294+
295+This is a slightly more complicated example arising from:
296+
297+.. code-block:: idris
298+
299+ idNat : Nat -> Nat
300+ idNat = %runElab (do
301+
302+This introduces a guess that hole_0 = hole_2 .
303+
304++----------------------------------------------------+
305+| ?{hole_0} ≈ λ x . ? {hole_2} . {hole_2} . {hole_0} |
306++----------------------------------------------------+
307+
308+Following on from the previous example a lambda function is introduced like this:
309+
310+.. code-block:: idris
311+
312+ intro `{{x}}
313+
314+So now the expression is wrapped in a lambda binding.
315+
316++-------------------------------------------------------+
317+| ?{hole_0} ≈ λ x . ?{hole_2} ≈ x . {hole_2} . {hole_0} |
318++-------------------------------------------------------+
319+
320+Following on, we can use the fill tactic like this:
321+
322+.. code-block:: idris
323+
324+ fill (Var `{{x}})
325+
326+which introduces another guess.
327+
328++--------------------------------+
329+| ?{hole_0} ≈ λ x . x . {hole_0} |
330++--------------------------------+
331+
332+The solve tactic completes the proof
333+
334+Binders
335+-------
336+
337+Here we look at each tactic in turn to see how they affect the proof state.
338+
339+Introduction tactics for binders. The binder types are:
340+
341+- lambda function (intro)
342+- dependent function (forall)
343+- let (letBind)
344+- pattern (patbind)
345+
346+A precondition of these tactics is that the focused hole is of the form:
347+
348++-----------+
349+| ?h : t.h |
350++-----------+
351+
352+that is, that the body of its scope consists directly of a reference to the hole-bound variable. If a hole binder were of the form:
353+
354++--------------------+
355+| ?h : t1 -> t2.f h |
356++--------------------+
357+
358+and a tactic such as
359+
360++------------------+
361+| intro \`{{x}} |
362++------------------+
363+
364+were applied, the result would be the term
365+
366++---------------------------+
367+| ?h : t2 . λ x:t1. f h |
368++---------------------------+
369+
370+However this would cause the application of f to be ill-typed, as it expects an argument of type t1->t2, not an argument of type t2. Additionally, some binding tactics require that t, the type of the hole h, have a specific form, because the binder to be established may have a typing rule associated with it.
371+
372+.. list-table:: Binders
373+ :widths: 10 30
374+ :stub-columns: 1
375+
376+ * - intro
377+ - Introduce a lambda binding around the current hole and focus on the body.
378+
379+ Requires that the hole be in binding form (use 'attack' if it might not be).
380+
381+ @ n the name to use for the argument.
382+
383+ Signature:
384+
385+ intro : (n : TTName) -> Elab ()
386+
387+ Result
388+
389+ λn:t1.?h:[n/x]t2.h
390+
391+ * - intro'
392+ - Introduce a lambda binding around the current hole and focus on the body, using the name provided by the type of the hole.
393+
394+ Requires that the hole be immediately under its binder (use 'attack' if it might not be).
395+
396+ Signature:
397+
398+ intro' : Elab ()
399+
400+ * - forall
401+ - Introduce a dependent function type binding into the current hole, and focus on the body. Requires that the hole be immediately under its binder
402+
403+ (use 'attack' if it might not be).
404+
405+ Signature:
406+
407+ forall : TTName -> Raw -> Elab ()
408+
409+ * - patbind
410+ - Introduce a new pattern binding. Requires that the hole be immediately under its binder (use 'attack' if it might not be).
411+
412+ Signature:
413+
414+ patbind : TTName -> Elab ()
415+
416+ * - letbind
417+ - Introduce a new let binding.
418+
419+ Requires that the hole be immediately under its binder (use 'attack' if it might not be).
420+
421+ - @ n the name to let bind
422+ - @ ty the type of the term to be let-bound
423+ - @ tm the term to be bound
424+
425+ Signature:
426+
427+ letbind : (n : TTName) -> (ty, tm : Raw) -> Elab ()
428+
429+.. target-notes::
430+.. _`Dependently Typed Functional Programs and their Proofs by McBride 1999`: https://www.era.lib.ed.ac.uk/handle/1842/374
docs/faq/faq.rst+162−22
@@ -11,12 +11,13 @@ However, Idris has been designed from the start to emphasise general purpose
1111programming rather than theorem proving. As such, it supports interoperability
1212with systems libraries and C programs, and language constructs for
1313domain specific language implementation. It also includes higher level
14−programming constructs such as type classes and do notation.
14+programming constructs such as interfaces (similar to type classes) and do notation.
1515
1616Idris supports multiple back ends (C and JavaScript by default, with the
1717ability to add more via plugins) and has a reference run time system, written
1818in C, with a garbage collector and built-in message passing concurrency.
1919
20+
2021Is Idris production ready?
2122==========================
2223
@@ -32,6 +33,31 @@ for use in production would be very welcome - this includes (but is not
3233limited to) extra library support, polishing the run-time system (and ensuring
3334it is robust), providing and maintaining a JVM back end, etc.
3435
36+Is there some documentation for the standard lib? List of functions?
37+=====================================================================
38+
39+API documentation for the shipped packages is listed on `the
40+documentation page <https://www.idris-lang.org/documentation/>`_.
41+
42+Unfortunately, the default prelude and shipped packages for `Idris`
43+are not necessarily complete with regards to documentation. Other
44+ways to find functions include:
45+
46++ REPL commands:
47+
48+ + Use `:apropos` to search for text in documentation and function names.
49+ + Use `:search` to search for functions of a given type.
50+ + Use `:browse` to list the contents of a given namespace.
51+
52++ Use the REPL's auto-complete functionality.
53++ Grep through the source code in `libs/`
54+
55+If you find that the shipped packages are lacking in documentation,
56+please feel free to write some. Or bug someone to do so. `Idris` has
57+syntax for providing rich documentation, which is then viewable using
58+the `:doc` command and listed in generated HTML API documentation.
59+
60+
3561Why does Idris use eager evaluation rather than lazy?
3662=====================================================
3763
@@ -60,6 +86,7 @@ Here, it is clear from the type that ``thing_val`` is guaranteed to be a
6086concrete ``Int``, whereas ``thing_comp`` is a computation which will produce an
6187``Int``.
6288
89+
6390How can I make lazy control structures?
6491=======================================
6592
@@ -74,9 +101,10 @@ Booleans is defined as follows in the library:
74101 ifThenElse True t e = t
75102 ifThenElse False t e = e
76103
77−The type ``Lazy a`` for ``t`` and ``f`` indicates that those arguments will
104+The type ``Lazy a`` for ``t`` and ``e`` indicates that those arguments will
78105only be evaluated if they are used, that is, they are evaluated lazily.
79106
107+
80108Evaluation at the REPL doesn't behave as I expect. What's going on?
81109===================================================================
82110
@@ -103,6 +131,60 @@ the difference between:
103131 Idris> \n, m => n + (S m)
104132 \n => \m => plus n (S m) : Nat -> Nat -> Nat
105133
134+
135+Why can't I use a function with no arguments in a type?
136+=======================================================
137+
138+If you use a name in a type which begins with a lower case letter, and which is
139+not applied to any arguments, then Idris will treat it as an implicitly
140+bound argument. For example:
141+
142+.. code-block:: idris
143+
144+ append : Vect n ty -> Vect m ty -> Vect (n + m) ty
145+
146+Here, ``n``, ``m``, and ``ty`` are implicitly bound. This rule applies even
147+if there are functions defined elsewhere with any of these names. For example,
148+you may also have:
149+
150+.. code-block:: idris
151+
152+ ty : Type
153+ ty = String
154+
155+Even in this case, ``ty`` is still considered implicitly bound in the definition
156+of ``append``, rather than making the type of ``append`` equivalent to...
157+
158+.. code-block:: idris
159+
160+ append : Vect n String -> Vect m String -> Vect (n + m) String
161+
162+...which is probably not what was intended! The reason for this rule is so
163+that it is clear just from looking at the type of ``append``, and no other
164+context, what the implicitly bound names are.
165+
166+If you want to use an unapplied name in a type, you have two options. You
167+can either explicitly qualify it, for example, if ``ty`` is defined in the
168+namespace ``Main`` you can do the following:
169+
170+.. code-block:: idris
171+
172+ append : Vect n Main.ty -> Vect m Main.ty -> Vect (n + m) Main.ty
173+
174+Alternatively, you can use a name which does not begin with a lower case
175+letter, which will never be implicitly bound:
176+
177+.. code-block:: idris
178+
179+ Ty : Type
180+ Ty = String
181+
182+ append : Vect n Ty -> Vect m Ty -> Vect (n + m) Ty
183+
184+As a convention, if a name is intended to be used as a type synonym, it is
185+best for it to begin with a capital letter to avoid this restriction.
186+
187+
106188I have an obviously terminating program, but Idris says it possibly isn't total. Why is that?
107189=============================================================================================
108190
@@ -115,11 +197,13 @@ function back to itself. On such a path, there must be at least one
115197argument which converges to a base case.
116198
117199- Mutually recursive functions are supported
200+
118201- However, all functions on the path must be fully applied. In particular,
119202 higher order applications are not supported
203+
120204- Idris identifies arguments which converge to a base case by looking for
121205 recursive calls to syntactically smaller arguments of inputs. e.g.
122− ``k`` is syntactially smaller than ``S (S k)`` because ``k`` is a
206+ ``k`` is syntactically smaller than ``S (S k)`` because ``k`` is a
123207 subterm of ``S (S k)``, but ``(k, k)`` is
124208 not syntactically smaller than ``(S k, S k)``.
125209
@@ -127,37 +211,44 @@ If you have a function which you believe to be terminating, but Idris does
127211not, you can either restructure the program, or use the ``assert_total``
128212function.
129213
214+
130215When will Idris be self-hosting?
131216================================
132217
133−It’s not a priority, though not a bad idea in the long run. It would be a
134−worthwhile effort in the short term to implement libraries to support
135−self-hosting, such as a good parsing library.
218+It’s not a priority, though not a bad idea in the long run. It would
219+be a worthwhile effort in the short term to implement libraries in
220+Idris to support self-hosting, such as argument parsing and a
221+POSIX-compliant library for system interaction.
136222
137−Does Idris have Universe Polymorphism? What is the type of ``Type``?
223+Does Idris have universe polymorphism? What is the type of ``Type``?
138224====================================================================
139225
140−Rather than Universe polymorphism, Idris has a cumulative hierarchy of
226+Rather than universe polymorphism, Idris has a cumulative hierarchy of
141227universes; ``Type : Type 1``, ``Type 1 : Type 2``, etc.
142−Cumulativity means that if ``x : Type n`` then also ``x : Type m``,
143−provided that ``n <= m``.
228+Cumulativity means that if ``x : Type n`` and ``n <= m``, then
229+``x : Type m``. Universe levels are always inferred by Idris, and
230+cannot be specified explicitly. The REPL command ``:type Type 1`` will
231+result in an error, as will attempting to specify the universe level
232+of any type.
144233
145−Why does Idris use ``Float`` and ``Double`` instead of ``Float32`` and ``Float64``?
146−===================================================================================
234+
235+Why does Idris use ``Double`` instead of ``Float64``?
236+=====================================================
147237
148238Historically the C language and many other languages have used the
149239names ``Float`` and ``Double`` to represent floating point numbers of
150−size 32 and 64 respectivly. Newer languages such as Rust and Julia
151−have begun to follow the naming scheme described in `IEE Standard for
240+size 32 and 64 respectively. Newer languages such as Rust and Julia
241+have begun to follow the naming scheme described in `IEEE Standard for
152242Floating-Point Arithmetic (IEEE 754)
153−<http://en.wikipedia.org/wiki/IEEE_floating_point>`_. This describes
243+<https://en.wikipedia.org/wiki/IEEE_floating_point>`_. This describes
154244single and double precision numbers as ``Float32`` and ``Float64``;
155245the size is described in the type name.
156246
157247Due to developer familiarity with the older naming convention, and
158248choice by the developers of Idris, Idris uses the C style convention.
159−That is, the names ``Float`` and ``Double`` are used to describe
160−single and double precision numbers.
249+That is, the name ``Double`` is used to describe double precision
250+numbers, and Idris does not support 32 bit floats at present.
251+
161252
162253What is -ffreestanding?
163254=======================
@@ -168,22 +259,71 @@ where the install directory is unknown at build time. When passing this
168259flag, the IDRIS_LIB_DIR environment variable needs to be set to the path
169260where the Idris libs reside relative to the idris executable. The
170261IDRIS_TOOLCHAIN_DIR environment variable is optional, if that is set,
171−Idris will use that path to find the C compiler.
262+Idris will use that path to find the C compiler. For example:
172263
173−Example::
264+::
174265
175− IDRIS_LIB_DIR="./libs" IDRIS_TOOLCHAIN_DIR="./mingw/bin" CABALFLAGS="-fffi -ffreestanding -frelease" make
266+ IDRIS_LIB_DIR="./libs" \
267+ IDRIS_TOOLCHAIN_DIR="./mingw/bin" \
268+ CABALFLAGS="-fffi -ffreestanding -frelease" \
269+ make
176270
177−What does the name ‘Idris’ mean?
271+
272+What does the name “Idris” mean?
178273================================
179274
180275British people of a certain age may be familiar with this
181276`singing dragon <https://www.youtube.com/watch?v=G5ZMNyscPcg>`_. If
182277that doesn’t help, maybe you can invent a suitable acronym :-) .
183278
279+
280+Will there be support for Unicode characters for operators?
281+===========================================================
282+
283+There are several reasons why we should not support Unicode operators:
284+
285+- It's hard to type (this is important if you're using someone else's code, for
286+ example). Various editors have their own input methods, but you have to know
287+ what they are.
288+
289+- Not every piece of software easily supports it. Rendering issues have been
290+ noted on some mobile email clients, terminal-based IRC clients, web browsers,
291+ etc. There are ways to resolve these rendering issues but they provide a
292+ barrier to entry to using Idris.
293+
294+- Even if we leave it out of the standard library (which we will in any case!)
295+ as soon as people start using it in their library code, others have to deal
296+ with it.
297+
298+- Too many characters look too similar. We had enough trouble with confusion
299+ between 0 and O without worrying about all the different kinds of colons and
300+ brackets.
301+
302+- There seems to be a tendency to go over the top with use of Unicode. For
303+ example, using sharp and flat for delay and force (or is it the other way
304+ around?) in Agda seems gratuitous. We don't want to encourage this sort of
305+ thing, when words are often better.
306+
307+With care, Unicode operators can make things look pretty but so can ``lhs2TeX``.
308+Perhaps in a few years time things will be different and software will cope
309+better and it will make sense to revisit this. For now, however, Idris will not
310+be offering arbitrary Unicode symbols in operators.
311+
312+This seems like an instance of `Wadler's
313+Law <https://www.haskell.org/haskellwiki/Wadler%27s_Law>`__ in action.
314+
315+This answer is based on Edwin Brady's response in the following
316+`pull request <https://github.com/idris-lang/Idris-dev/pull/694#issuecomment-29559291>`_.
317+
318+Where can I find the community standards for the Idris community?
319+==================================================================
320+
321+The Idris Community Standards are stated `here
322+<https://www.idris-lang.org/documentation/community-standards/>`_ .
323+
184324Where can I find more answers?
185325==============================
186326
187327There is an `Unofficial FAQ
188328<https://github.com/idris-lang/Idris-dev/wiki/Unofficial-FAQ>`_ on the wiki on
189−github which answers more technical questions and may be updated more often.
329+GitHub which answers more technical questions and may be updated more often.
docs/guides/index.rst+1−1
@@ -12,7 +12,7 @@ Tutorials submitted by community members.
1212 Idris Community* has waived all copyright and related or neighboring
1313 rights to Documentation for Idris.
1414
15− More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
15+ More information concerning the CC0 can be found online at: https://creativecommons.org/publicdomain/zero/1.0/
1616
1717
1818.. toctree::
docs/guides/theorem-prover.rst+1−1
@@ -22,7 +22,7 @@ We will be given the following prompt, in future releases the version string wil
2222 ____ __ _
2323 / _/___/ /____(_)____
2424 / // __ / ___/ / ___/ Version 0.9.18.1
25− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
25+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
2626 /___/\__,_/_/ /_/____/ Type :? for help
2727
2828 Idris is free software with ABSOLUTELY NO WARRANTY.
docs/guides/type-providers-ffi.rst+37−81
@@ -3,7 +3,7 @@ Type Providers in Idris
33***********************
44
55`Type providers in Idris
6−<http://www.itu.dk/people/drc/pubs/dependent-type-providers.pdf>`__
6+<https://www.davidchristiansen.dk/pubs/dependent-type-providers.pdf>`__
77are simple enough, but there are a few caveats to using them that it
88would be worthwhile to go through the basic steps. We also go over
99foreign functions, because these will often be used with type
@@ -53,8 +53,8 @@ actions. Let's write a simple one now:
5353 putStrLn "I'm sorry, I don't know how big size_t is. Can you tell me, in bytes?"
5454 resp <- getLine
5555 case readInt resp of
56− Just sizeTSize => return (Provide sizeTSize)
57− Nothing => return (Error "I'm sorry, I don't understand.")
56+ Just sizeTSize => pure (Provide sizeTSize)
57+ Nothing => pure (Error "I'm sorry, I don't understand.")
5858 -- the readInt function is left as an exercise
5959
6060We assume that whoever's compiling the library knows the size of
@@ -115,75 +115,19 @@ So now we can get the size of ``size_t`` as long as we're in C code.
115115We'd like to be able to use this from Idris. Can we do this? It turns
116116out we can.
117117
118−``mkForeign``
118+``foreign``
119119-------------
120120
121−With mkForeign, we can turn a C function into an IO action. It works
121+With foreign, we can turn a C function into an IO action. It works
122122like this:
123123
124124.. code-block:: idris
125125
126126 getSizeT : IO Int
127− getSizeT = mkForeign (FFun "sizeof_size_t" [] FInt)
127+ getSizeT = foreign FFI_C "sizeof_size_t" (IO Int)
128128
129−Pretty simple. ``mkForeign`` takes a specification of what function it
130−needs to call, and we construct this specification with ``FFun``. And
131−``FFun`` just takes a name, a list of argument types (we have none),
132−and a return type.
133−
134−One thing you might want to note: the return type we've specified is
135−``FInt``, not ``Int``. That's because ``Int`` is an idris type and C
136−functions don't return idris types. ``FInt`` is not an idris type, but
137−is just the representation of the type of a C int. It tells the
138−compiler "Treat the return value of this C function like it's a C int,
139−and when you pass it back into Idris, convert it to an Idris int."
140−
141−Caveats of mkForeign
142−--------------------
143−
144−First and foremost: ``mkForeign`` is not actually a function. It is
145−treated specially by the compiler, and there are certain rules you
146−need to follow when using it.
147−
148−- Rule 1: the name string must be a literal or constant
149−
150−This does not work:
151−
152−.. code-block:: idris
153−
154− intIntToInt : String -> Int -> Int -> IO Int
155− intIntToInt name = mkForeign (FFun name [FInt, FInt] FInt)
156−
157−You'll just have to bite the bullet and write out the whole
158−``mkForeign`` and ``FFun`` expression each time.
159−
160−- Rule 2: the "call" to ``mkForeign`` must be fully applied
161−
162−This just means that every argument appearing in the list of argument
163−types must be applied wherever you write ``mkForeign``. The arguments
164−don't have to be literals or even known at compile time; they just
165−have to be there. For example, if we have ``strlen : String -> IO
166−Int``, then this is fine:
167−
168−.. code-block:: idris
169−
170− strlen str = mkForeign (FFun "strlen" [FString] FInt) str
171−
172−but this is not fine:
173−
174−.. code-block:: idris
175−
176− strlen = mkForeign (FFun "strlen" [FString] FInt)
177−
178−Note that this only applies to places where you literally typed
179−``mkForeign``. Once you've defined it, ``strlen`` is just a normal
180−function returning an IO action, and it doesn't need to be fully
181−applied. This is okay:
182−
183−.. code-block:: idris
184−
185− lengths : IO [Int]
186− lengths = mapM strlen listOfStrings
129+Pretty simple. ``foreign`` takes a specification of what function it
130+needs to call and that function's return type.
187131
188132Running foreign functions
189133-------------------------
@@ -242,6 +186,8 @@ First, let's write a C file containing functions that we'll bind to.
242186.. code-block:: c
243187
244188 /* stattypes.c */
189+ #include <sys/stat.h>
190+
245191 int sizeof_dev_t() { return sizeof(dev_t); }
246192 int sizeof_ino_t() { return sizeof(ino_t); }
247193 /* lots more functions like this */
@@ -254,22 +200,34 @@ Next, an Idris file to define our providers:
254200 module Providers
255201
256202 %dynamic "./stattypes.so"
203+ %access export
257204
258205 sizeOfDevT : IO Int
259− sizeOfDevT = mkForeign (FFun "sizeof_dev_t" [] FInt)
206+ sizeOfDevT = foreign FFI_C "sizeof_dev_t" (IO Int)
260207 {- lots of similar functions -}
261208
262− -- now we have an integer, but we want a Provider FTy
263− -- since our sizeOf* functions are ordinary IO actions, we
209+ -- Indicates how many bits are used to represent various system
210+ -- stat types.
211+ public export
212+ data BitWidth = B8 | B16 | B32 | B64
213+
214+ Show BitWidth where
215+ show B8 = "8 bits"
216+ show B16 = "16 bits"
217+ show B32 = "32 bits"
218+ show B64 = "64 bits"
219+
220+ -- Now we have an integer, but we want a Provider BitWidth.
221+ -- Since our sizeOf* functions are ordinary IO actions, we
264222 -- can just map over them.
265− bytesToType : Int -> Provider FTy
266− bytesToType 1 = Provide (FIntT IT8) -- "8 bit foreign integer"
267− bytesToType 2 = Provide (FIntT IT16)
268− bytesToType 4 = Provide (FIntT IT32)
269− bytesToType 8 = Provide (FIntT IT64)
270− bytesToType _ = Error "Unrecognized integral type."
271−
272− getDevT : IO (Provider FTy)
223+ bytesToType : Int -> Provider BitWidth
224+ bytesToType 1 = Provide B8 -- "8 bit value"
225+ bytesToType 2 = Provide B16
226+ bytesToType 4 = Provide B32
227+ bytesToType 8 = Provide B64
228+ bytesToType _ = Error "Unrecognised integral type."
229+
230+ getDevT : IO (Provider BitWidth)
273231 getDevT = map bytesToType sizeOfDevT
274232 {- lots of similar functions -}
275233
@@ -282,10 +240,8 @@ providers:
282240 module Main
283241 import Providers
284242 %language TypeProviders
285− %provide (FDevT : FTy) with getDevT
286−
287− -- interpFTy translates a foreign type to the corresponding idris type
288− DevT : Type
289− DevT = interpFTy FDevT -- on most systems, DevT = Bits64
243+ %provide (DevTBitWidth : BitWidth) with getDevT
290244
291− -- We can now use DevT in our program and FDevT in our FFun expressions!
245+ -- We can now use DevTBitWidth in our program!
246+ main : IO ()
247+ main = putStrLn $ "size of dev_t: " ++ show DevTBitWidth
docs/image/README.mdnew file+16
@@ -0,0 +1,16 @@
1+Many of the images in this directory have two files with the same name but a different extension:
2+
3+* The SVG file, being vector graphics, is best for drawing and modifying.
4+* The PNG file, being raster graphics, gives more consistent rendering.
5+
6+The image has therefore been generated as an SVG file and then exported to the PNG file.
7+
8+So, if you need to modify an image, I suggest the following sequence:
9+
10+* Edit the SVG file using a suitable editor (I use Inkscape).
11+* Export the changes to the PNG file, overwriting the old version.
12+* upload both files.
13+
14+Note, when exporting in Inkscape:
15+* Select everything first, this stops an enormous boundary being exported.
16+* After selecting the file to export to and clicking OK, don't forget to click on export button as well.
docs/image/attack.pngnew file

Binary file not shown.

docs/image/attack.svgnew file+199
@@ -0,0 +1,199 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 210 297"
15+ version="1.1"
16+ id="svg8"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="attack.svg">
19+ <defs
20+ id="defs2">
21+ <marker
22+ inkscape:stockid="Arrow1Mend"
23+ orient="auto"
24+ refY="0.0"
25+ refX="0.0"
26+ id="marker890"
27+ style="overflow:visible;"
28+ inkscape:isstock="true">
29+ <path
30+ id="path888"
31+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
32+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
33+ transform="scale(0.4) rotate(180) translate(10,0)" />
34+ </marker>
35+ <marker
36+ inkscape:isstock="true"
37+ style="overflow:visible;"
38+ id="marker838"
39+ refX="0.0"
40+ refY="0.0"
41+ orient="auto"
42+ inkscape:stockid="Arrow1Mend"
43+ inkscape:collect="always">
44+ <path
45+ transform="scale(0.4) rotate(180) translate(10,0)"
46+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
47+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
48+ id="path836" />
49+ </marker>
50+ <marker
51+ inkscape:stockid="Arrow1Mend"
52+ orient="auto"
53+ refY="0.0"
54+ refX="0.0"
55+ id="Arrow1Mend"
56+ style="overflow:visible;"
57+ inkscape:isstock="true"
58+ inkscape:collect="always">
59+ <path
60+ id="path4529"
61+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
62+ style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
63+ transform="scale(0.4) rotate(180) translate(10,0)" />
64+ </marker>
65+ </defs>
66+ <sodipodi:namedview
67+ id="base"
68+ pagecolor="#ffffff"
69+ bordercolor="#666666"
70+ borderopacity="1.0"
71+ inkscape:pageopacity="0.0"
72+ inkscape:pageshadow="2"
73+ inkscape:zoom="1"
74+ inkscape:cx="313.5"
75+ inkscape:cy="696.5"
76+ inkscape:document-units="mm"
77+ inkscape:current-layer="layer1"
78+ showgrid="false"
79+ inkscape:window-width="1920"
80+ inkscape:window-height="1015"
81+ inkscape:window-x="0"
82+ inkscape:window-y="0"
83+ inkscape:window-maximized="1" />
84+ <metadata
85+ id="metadata5">
86+ <rdf:RDF>
87+ <cc:Work
88+ rdf:about="">
89+ <dc:format>image/svg+xml</dc:format>
90+ <dc:type
91+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
92+ <dc:title />
93+ </cc:Work>
94+ </rdf:RDF>
95+ </metadata>
96+ <g
97+ inkscape:label="Layer 1"
98+ inkscape:groupmode="layer"
99+ id="layer1">
100+ <rect
101+ style="fill:#ffff00;fill-opacity:1;stroke-width:0.26458332"
102+ id="rect22"
103+ width="28.839582"
104+ height="6.0854182"
105+ x="66.67498"
106+ y="114.4375"
107+ inkscape:export-xdpi="61.120499"
108+ inkscape:export-ydpi="61.120499" />
109+ <text
110+ xml:space="preserve"
111+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
112+ x="65.352081"
113+ y="105.17709"
114+ id="text12"
115+ inkscape:export-xdpi="61.120499"
116+ inkscape:export-ydpi="61.120499"><tspan
117+ sodipodi:role="line"
118+ x="65.352081"
119+ y="105.17709"
120+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
121+ id="tspan847">?h ∶ t1→t2 . f h</tspan></text>
122+ <text
123+ id="text16"
124+ y="118.67083"
125+ x="56.356247"
126+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
127+ xml:space="preserve"
128+ inkscape:export-xdpi="61.120499"
129+ inkscape:export-ydpi="61.120499"><tspan
130+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
131+ y="118.67083"
132+ x="56.356247"
133+ id="tspan14"
134+ sodipodi:role="line">?h ≈ (?h' ∶ t1→t2 . h')∶ t1→t2 . f h</tspan></text>
135+ <text
136+ id="text20"
137+ y="110.99791"
138+ x="82.814583"
139+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
140+ xml:space="preserve"
141+ inkscape:export-xdpi="61.120499"
142+ inkscape:export-ydpi="61.120499"><tspan
143+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
144+ y="110.99791"
145+ x="82.814583"
146+ id="tspan18"
147+ sodipodi:role="line">attack</tspan></text>
148+ <path
149+ style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
150+ d="m 80.668481,106.30075 -0.0032,7.57492"
151+ id="path4518"
152+ inkscape:connector-curvature="0"
153+ sodipodi:nodetypes="cc"
154+ inkscape:export-xdpi="61.120499"
155+ inkscape:export-ydpi="61.120499" />
156+ <text
157+ inkscape:export-ydpi="61.120499"
158+ inkscape:export-xdpi="61.120499"
159+ xml:space="preserve"
160+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
161+ x="63.235413"
162+ y="94.85833"
163+ id="text832"><tspan
164+ sodipodi:role="line"
165+ id="tspan830"
166+ x="63.235413"
167+ y="94.85833"
168+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">focus</tspan></text>
169+ <path
170+ inkscape:export-ydpi="61.120499"
171+ inkscape:export-xdpi="61.120499"
172+ sodipodi:nodetypes="cc"
173+ inkscape:connector-curvature="0"
174+ id="path834"
175+ d="m 66.645564,94.659084 -0.0032,5.458256"
176+ style="fill:none;stroke:#0000ff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker838)" />
177+ <text
178+ id="text884"
179+ y="110.23682"
180+ x="61.94511"
181+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
182+ xml:space="preserve"
183+ inkscape:export-xdpi="61.120499"
184+ inkscape:export-ydpi="61.120499"><tspan
185+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332"
186+ y="110.23682"
187+ x="61.94511"
188+ id="tspan882"
189+ sodipodi:role="line">focus</tspan></text>
190+ <path
191+ style="fill:none;stroke:#0000ff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker890)"
192+ d="m 66.67818,108.97924 -0.0032,5.45826"
193+ id="path886"
194+ inkscape:connector-curvature="0"
195+ sodipodi:nodetypes="cc"
196+ inkscape:export-xdpi="61.120499"
197+ inkscape:export-ydpi="61.120499" />
198+ </g>
199+</svg>
docs/image/binders.pngnew file

Binary file not shown.

docs/image/binders.svgnew file+326
@@ -0,0 +1,326 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="binders.svg">
19+ <defs
20+ id="defs4" />
21+ <sodipodi:namedview
22+ id="base"
23+ pagecolor="#ffffff"
24+ bordercolor="#666666"
25+ borderopacity="1.0"
26+ inkscape:pageopacity="0.0"
27+ inkscape:pageshadow="2"
28+ inkscape:zoom="1"
29+ inkscape:cx="255.00889"
30+ inkscape:cy="520"
31+ inkscape:document-units="px"
32+ inkscape:current-layer="layer1"
33+ showgrid="false"
34+ inkscape:window-width="1163"
35+ inkscape:window-height="1011"
36+ inkscape:window-x="-4"
37+ inkscape:window-y="0"
38+ inkscape:window-maximized="0" />
39+ <metadata
40+ id="metadata7">
41+ <rdf:RDF>
42+ <cc:Work
43+ rdf:about="">
44+ <dc:format>image/svg+xml</dc:format>
45+ <dc:type
46+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47+ <dc:title></dc:title>
48+ </cc:Work>
49+ </rdf:RDF>
50+ </metadata>
51+ <g
52+ inkscape:label="Layer 1"
53+ inkscape:groupmode="layer"
54+ id="layer1">
55+ <text
56+ xml:space="preserve"
57+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
58+ x="157"
59+ y="177.3622"
60+ id="text4136"
61+ sodipodi:linespacing="125%"
62+ inkscape:export-xdpi="61.120499"
63+ inkscape:export-ydpi="61.120499"><tspan
64+ sodipodi:role="line"
65+ id="tspan4138"
66+ x="157"
67+ y="177.3622"
68+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;">Code</tspan></text>
69+ <text
70+ sodipodi:linespacing="125%"
71+ id="text4140"
72+ y="177.3622"
73+ x="287"
74+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
75+ xml:space="preserve"
76+ inkscape:export-xdpi="61.120499"
77+ inkscape:export-ydpi="61.120499"><tspan
78+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;"
79+ y="177.3622"
80+ x="287"
81+ id="tspan4142"
82+ sodipodi:role="line">Logic</tspan></text>
83+ <path
84+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
85+ d="m 229,161.3622 1,298"
86+ id="path4144"
87+ inkscape:connector-curvature="0"
88+ sodipodi:nodetypes="cc"
89+ inkscape:export-xdpi="61.120499"
90+ inkscape:export-ydpi="61.120499" />
91+ <path
92+ inkscape:connector-curvature="0"
93+ id="path4146"
94+ d="m 473.5,184.8622 -364,1"
95+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
96+ sodipodi:nodetypes="cc"
97+ inkscape:export-xdpi="61.120499"
98+ inkscape:export-ydpi="61.120499" />
99+ <path
100+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
101+ d="m 473.5,270.8622 -364,1"
102+ id="path4148"
103+ inkscape:connector-curvature="0"
104+ sodipodi:nodetypes="cc"
105+ inkscape:export-xdpi="61.120499"
106+ inkscape:export-ydpi="61.120499" />
107+ <path
108+ inkscape:connector-curvature="0"
109+ id="path4150"
110+ d="m 475.5,362.8622 -366,1"
111+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
112+ sodipodi:nodetypes="cc"
113+ inkscape:export-xdpi="61.120499"
114+ inkscape:export-ydpi="61.120499" />
115+ <path
116+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
117+ d="m 475.5,458.8622 -366,1"
118+ id="path4152"
119+ inkscape:connector-curvature="0"
120+ sodipodi:nodetypes="cc"
121+ inkscape:export-xdpi="61.120499"
122+ inkscape:export-ydpi="61.120499" />
123+ <text
124+ sodipodi:linespacing="125%"
125+ id="text4154"
126+ y="235.3622"
127+ x="19"
128+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
129+ xml:space="preserve"
130+ inkscape:export-xdpi="61.120499"
131+ inkscape:export-ydpi="61.120499"><tspan
132+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
133+ y="235.3622"
134+ x="19"
135+ id="tspan4156"
136+ sodipodi:role="line">Abstraction</tspan></text>
137+ <text
138+ xml:space="preserve"
139+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
140+ x="19"
141+ y="399.36218"
142+ id="text4158"
143+ sodipodi:linespacing="125%"
144+ inkscape:export-xdpi="61.120499"
145+ inkscape:export-ydpi="61.120499"><tspan
146+ sodipodi:role="line"
147+ id="tspan4160"
148+ x="19"
149+ y="399.36218"
150+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">let</tspan><tspan
151+ sodipodi:role="line"
152+ x="19"
153+ y="424.36218"
154+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
155+ id="tspan4184">binding</tspan></text>
156+ <text
157+ sodipodi:linespacing="125%"
158+ id="text4162"
159+ y="307.36218"
160+ x="19"
161+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
162+ xml:space="preserve"
163+ inkscape:export-xdpi="61.120499"
164+ inkscape:export-ydpi="61.120499"><tspan
165+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
166+ y="307.36218"
167+ x="19"
168+ id="tspan4164"
169+ sodipodi:role="line">function</tspan><tspan
170+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
171+ y="332.36218"
172+ x="19"
173+ sodipodi:role="line"
174+ id="tspan4166">space</tspan></text>
175+ <text
176+ xml:space="preserve"
177+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
178+ x="167"
179+ y="235.3622"
180+ id="text4168"
181+ sodipodi:linespacing="125%"
182+ inkscape:export-xdpi="61.120499"
183+ inkscape:export-ydpi="61.120499"><tspan
184+ sodipodi:role="line"
185+ id="tspan4170"
186+ x="167"
187+ y="235.3622"
188+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;">λ x:t</tspan></text>
189+ <text
190+ sodipodi:linespacing="125%"
191+ id="text4172"
192+ y="222.3622"
193+ x="259"
194+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
195+ xml:space="preserve"
196+ inkscape:export-xdpi="61.120499"
197+ inkscape:export-ydpi="61.120499"><tspan
198+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;"
199+ y="222.3622"
200+ x="259"
201+ id="tspan4174"
202+ sodipodi:role="line">Γ ⊢ S : Type</tspan></text>
203+ <text
204+ sodipodi:linespacing="125%"
205+ id="text4180"
206+ y="417.36218"
207+ x="124"
208+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
209+ xml:space="preserve"
210+ inkscape:export-xdpi="61.120499"
211+ inkscape:export-ydpi="61.120499"><tspan
212+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;"
213+ y="417.36218"
214+ x="124"
215+ id="tspan4182"
216+ sodipodi:role="line">let x ↦ t : t</tspan></text>
217+ <path
218+ inkscape:connector-curvature="0"
219+ id="path4186"
220+ d="m 383.5,227.8622 -136,1"
221+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
222+ sodipodi:nodetypes="cc"
223+ inkscape:export-xdpi="61.120499"
224+ inkscape:export-ydpi="61.120499" />
225+ <text
226+ xml:space="preserve"
227+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
228+ x="246"
229+ y="248.3622"
230+ id="text4188"
231+ sodipodi:linespacing="125%"
232+ inkscape:export-xdpi="61.120499"
233+ inkscape:export-ydpi="61.120499"><tspan
234+ sodipodi:role="line"
235+ id="tspan4190"
236+ x="246"
237+ y="248.3622"
238+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;">Γ ; λ x:S ⊢ valid</tspan></text>
239+ <text
240+ xml:space="preserve"
241+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
242+ x="257"
243+ y="308.36218"
244+ id="text4192"
245+ sodipodi:linespacing="125%"
246+ inkscape:export-xdpi="61.120499"
247+ inkscape:export-ydpi="61.120499"><tspan
248+ sodipodi:role="line"
249+ id="tspan4194"
250+ x="257"
251+ y="308.36218"
252+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;">Γ ⊢ S : Type</tspan></text>
253+ <path
254+ sodipodi:nodetypes="cc"
255+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
256+ d="m 381.5,313.8622 -136,1"
257+ id="path4196"
258+ inkscape:connector-curvature="0"
259+ inkscape:export-xdpi="61.120499"
260+ inkscape:export-ydpi="61.120499" />
261+ <text
262+ sodipodi:linespacing="125%"
263+ id="text4198"
264+ y="334.36218"
265+ x="244"
266+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
267+ xml:space="preserve"
268+ inkscape:export-xdpi="61.120499"
269+ inkscape:export-ydpi="61.120499"><tspan
270+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;"
271+ y="334.36218"
272+ x="244"
273+ id="tspan4200"
274+ sodipodi:role="line">Γ ; ∀ x:S ⊢ valid</tspan></text>
275+ <text
276+ xml:space="preserve"
277+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
278+ x="167"
279+ y="323.36218"
280+ id="text4202"
281+ sodipodi:linespacing="125%"
282+ inkscape:export-xdpi="61.120499"
283+ inkscape:export-ydpi="61.120499"><tspan
284+ sodipodi:role="line"
285+ id="tspan4204"
286+ x="167"
287+ y="323.36218"
288+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;">∀ x:t</tspan></text>
289+ <text
290+ sodipodi:linespacing="125%"
291+ id="text4206"
292+ y="402.36218"
293+ x="255"
294+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
295+ xml:space="preserve"
296+ inkscape:export-xdpi="61.120499"
297+ inkscape:export-ydpi="61.120499"><tspan
298+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;"
299+ y="402.36218"
300+ x="255"
301+ id="tspan4208"
302+ sodipodi:role="line">Γ ⊢ S : Type Γ ⊢ s:S </tspan></text>
303+ <path
304+ inkscape:connector-curvature="0"
305+ id="path4210"
306+ d="m 453.5,407.8622 -210,1"
307+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
308+ sodipodi:nodetypes="cc"
309+ inkscape:export-xdpi="61.120499"
310+ inkscape:export-ydpi="61.120499" />
311+ <text
312+ xml:space="preserve"
313+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
314+ x="242"
315+ y="428.36218"
316+ id="text4212"
317+ sodipodi:linespacing="125%"
318+ inkscape:export-xdpi="61.120499"
319+ inkscape:export-ydpi="61.120499"><tspan
320+ sodipodi:role="line"
321+ id="tspan4214"
322+ x="242"
323+ y="428.36218"
324+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;">Γ ; let x ↦ s : S ⊢ valid</tspan></text>
325+ </g>
326+</svg>
docs/image/compareToProofAssist.pngnew file

Binary file not shown.

docs/image/compareToProofAssist.svgnew file+260
@@ -0,0 +1,260 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="compareToProofAssist.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker4251"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow1Mend">
29+ <path
30+ transform="scale(0.4) rotate(180) translate(10,0)"
31+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
32+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
33+ id="path4253" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow1Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="marker5018"
41+ style="overflow:visible;"
42+ inkscape:isstock="true">
43+ <path
44+ id="path5020"
45+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
46+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
47+ transform="scale(0.4) rotate(180) translate(10,0)" />
48+ </marker>
49+ <marker
50+ inkscape:isstock="true"
51+ style="overflow:visible;"
52+ id="marker4436"
53+ refX="0.0"
54+ refY="0.0"
55+ orient="auto"
56+ inkscape:stockid="Arrow1Mend"
57+ inkscape:collect="always">
58+ <path
59+ transform="scale(0.4) rotate(180) translate(10,0)"
60+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
61+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
62+ id="path4438" />
63+ </marker>
64+ <marker
65+ inkscape:stockid="Arrow1Mend"
66+ orient="auto"
67+ refY="0.0"
68+ refX="0.0"
69+ id="Arrow1Mend"
70+ style="overflow:visible;"
71+ inkscape:isstock="true"
72+ inkscape:collect="always">
73+ <path
74+ id="path4167"
75+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
76+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
77+ transform="scale(0.4) rotate(180) translate(10,0)" />
78+ </marker>
79+ </defs>
80+ <sodipodi:namedview
81+ id="base"
82+ pagecolor="#ffffff"
83+ bordercolor="#666666"
84+ borderopacity="1.0"
85+ inkscape:pageopacity="0.0"
86+ inkscape:pageshadow="2"
87+ inkscape:zoom="1"
88+ inkscape:cx="377.89372"
89+ inkscape:cy="520"
90+ inkscape:document-units="px"
91+ inkscape:current-layer="layer1"
92+ showgrid="false"
93+ inkscape:window-width="1920"
94+ inkscape:window-height="1015"
95+ inkscape:window-x="0"
96+ inkscape:window-y="0"
97+ inkscape:window-maximized="1" />
98+ <metadata
99+ id="metadata7">
100+ <rdf:RDF>
101+ <cc:Work
102+ rdf:about="">
103+ <dc:format>image/svg+xml</dc:format>
104+ <dc:type
105+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
106+ <dc:title />
107+ </cc:Work>
108+ </rdf:RDF>
109+ </metadata>
110+ <g
111+ inkscape:label="Layer 1"
112+ inkscape:groupmode="layer"
113+ id="layer1">
114+ <text
115+ xml:space="preserve"
116+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
117+ x="162"
118+ y="326.36221"
119+ id="text4136"
120+ sodipodi:linespacing="125%"
121+ inkscape:export-xdpi="61.120499"
122+ inkscape:export-ydpi="61.120499"><tspan
123+ sodipodi:role="line"
124+ id="tspan4138"
125+ x="162"
126+ y="326.36221"
127+ style="font-size:15px;-inkscape-font-specification:'sans-serif Bold';font-family:sans-serif;font-weight:bold;font-style:normal;font-stretch:normal;font-variant:normal">Human</tspan></text>
128+ <text
129+ sodipodi:linespacing="125%"
130+ id="text4140"
131+ y="368.36221"
132+ x="162"
133+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
134+ xml:space="preserve"
135+ inkscape:export-xdpi="61.120499"
136+ inkscape:export-ydpi="61.120499"><tspan
137+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
138+ y="368.36221"
139+ x="162"
140+ id="tspan4142"
141+ sodipodi:role="line">Tactics</tspan></text>
142+ <text
143+ xml:space="preserve"
144+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
145+ x="161"
146+ y="415.36221"
147+ id="text4144"
148+ sodipodi:linespacing="125%"
149+ inkscape:export-xdpi="61.120499"
150+ inkscape:export-ydpi="61.120499"><tspan
151+ sodipodi:role="line"
152+ id="tspan4146"
153+ x="161"
154+ y="415.36221"
155+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">fill holes</tspan></text>
156+ <text
157+ sodipodi:linespacing="125%"
158+ id="text4148"
159+ y="282.36221"
160+ x="130"
161+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
162+ xml:space="preserve"
163+ inkscape:export-xdpi="61.120499"
164+ inkscape:export-ydpi="61.120499"><tspan
165+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;"
166+ y="282.36221"
167+ x="130"
168+ id="tspan4150"
169+ sodipodi:role="line">Proof assistant</tspan></text>
170+ <path
171+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
172+ d="m 188,329.3622 0,22"
173+ id="path4152"
174+ inkscape:connector-curvature="0"
175+ inkscape:export-xdpi="61.120499"
176+ inkscape:export-ydpi="61.120499" />
177+ <path
178+ inkscape:connector-curvature="0"
179+ id="path4434"
180+ d="m 187,373.3622 0,22"
181+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4436)"
182+ inkscape:export-xdpi="61.120499"
183+ inkscape:export-ydpi="61.120499" />
184+ <text
185+ xml:space="preserve"
186+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
187+ x="314"
188+ y="326.36221"
189+ id="text5002"
190+ sodipodi:linespacing="125%"
191+ inkscape:export-xdpi="61.120499"
192+ inkscape:export-ydpi="61.120499"><tspan
193+ sodipodi:role="line"
194+ id="tspan5004"
195+ x="314"
196+ y="326.36221"
197+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">Idris source</tspan></text>
198+ <text
199+ sodipodi:linespacing="125%"
200+ id="text5006"
201+ y="413.36221"
202+ x="281"
203+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
204+ xml:space="preserve"
205+ inkscape:export-xdpi="61.120499"
206+ inkscape:export-ydpi="61.120499"><tspan
207+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
208+ y="413.36221"
209+ x="281"
210+ id="tspan5008"
211+ sodipodi:role="line">fill holes</tspan><tspan
212+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
213+ y="432.11221"
214+ x="281"
215+ sodipodi:role="line"
216+ id="tspan5060">(implicit variables, etc)</tspan></text>
217+ <text
218+ xml:space="preserve"
219+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
220+ x="294"
221+ y="282.36221"
222+ id="text5010"
223+ sodipodi:linespacing="125%"
224+ inkscape:export-xdpi="61.120499"
225+ inkscape:export-ydpi="61.120499"><tspan
226+ sodipodi:role="line"
227+ id="tspan5012"
228+ x="294"
229+ y="282.36221"
230+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000">Idris Elaborator</tspan></text>
231+ <path
232+ inkscape:connector-curvature="0"
233+ id="path5014"
234+ d="m 342,330.3622 0,22"
235+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4251)"
236+ inkscape:export-xdpi="61.120499"
237+ inkscape:export-ydpi="61.120499" />
238+ <path
239+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5018)"
240+ d="m 341,374.3622 0,22"
241+ id="path5016"
242+ inkscape:connector-curvature="0"
243+ inkscape:export-xdpi="61.120499"
244+ inkscape:export-ydpi="61.120499" />
245+ <text
246+ inkscape:export-ydpi="61.120499"
247+ inkscape:export-xdpi="61.120499"
248+ sodipodi:linespacing="125%"
249+ id="text4247"
250+ y="369.36221"
251+ x="317"
252+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
253+ xml:space="preserve"><tspan
254+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
255+ y="369.36221"
256+ x="317"
257+ id="tspan4249"
258+ sodipodi:role="line">Tactics</tspan></text>
259+ </g>
260+</svg>
docs/image/elab.pngnew file

Binary file not shown.

docs/image/elab.svgnew file+139
@@ -0,0 +1,139 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="elab.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:stockid="Arrow1Mend"
23+ orient="auto"
24+ refY="0.0"
25+ refX="0.0"
26+ id="Arrow1Mend"
27+ style="overflow:visible;"
28+ inkscape:isstock="true">
29+ <path
30+ id="path4155"
31+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
32+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
33+ transform="scale(0.4) rotate(180) translate(10,0)" />
34+ </marker>
35+ </defs>
36+ <sodipodi:namedview
37+ id="base"
38+ pagecolor="#ffffff"
39+ bordercolor="#666666"
40+ borderopacity="1.0"
41+ inkscape:pageopacity="0.0"
42+ inkscape:pageshadow="2"
43+ inkscape:zoom="1"
44+ inkscape:cx="381.03373"
45+ inkscape:cy="520"
46+ inkscape:document-units="px"
47+ inkscape:current-layer="layer1"
48+ showgrid="false"
49+ inkscape:window-width="1072"
50+ inkscape:window-height="1011"
51+ inkscape:window-x="-4"
52+ inkscape:window-y="0"
53+ inkscape:window-maximized="0" />
54+ <metadata
55+ id="metadata7">
56+ <rdf:RDF>
57+ <cc:Work
58+ rdf:about="">
59+ <dc:format>image/svg+xml</dc:format>
60+ <dc:type
61+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
62+ <dc:title></dc:title>
63+ </cc:Work>
64+ </rdf:RDF>
65+ </metadata>
66+ <g
67+ inkscape:label="Layer 1"
68+ inkscape:groupmode="layer"
69+ id="layer1">
70+ <rect
71+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
72+ id="rect4136"
73+ width="206"
74+ height="77"
75+ x="236"
76+ y="254.3622"
77+ inkscape:export-xdpi="61.120499"
78+ inkscape:export-ydpi="61.120499" />
79+ <rect
80+ y="388.36218"
81+ x="236"
82+ height="77"
83+ width="206"
84+ id="rect4138"
85+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
86+ inkscape:export-xdpi="61.120499"
87+ inkscape:export-ydpi="61.120499" />
88+ <path
89+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
90+ d="m 328,331.3622 19,55"
91+ id="path4140"
92+ inkscape:connector-curvature="0"
93+ sodipodi:nodetypes="cc"
94+ inkscape:export-xdpi="61.120499"
95+ inkscape:export-ydpi="61.120499" />
96+ <text
97+ xml:space="preserve"
98+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
99+ x="242"
100+ y="271.36221"
101+ id="text5334"
102+ sodipodi:linespacing="125%"
103+ inkscape:export-xdpi="61.120499"
104+ inkscape:export-ydpi="61.120499"><tspan
105+ sodipodi:role="line"
106+ id="tspan5336"
107+ x="242"
108+ y="271.36221"
109+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">Definition Elaborator</tspan></text>
110+ <text
111+ sodipodi:linespacing="125%"
112+ id="text5338"
113+ y="308.36221"
114+ x="253"
115+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
116+ xml:space="preserve"
117+ inkscape:export-xdpi="61.120499"
118+ inkscape:export-ydpi="61.120499"><tspan
119+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
120+ y="308.36221"
121+ x="253"
122+ id="tspan5340"
123+ sodipodi:role="line">definition context</tspan></text>
124+ <text
125+ xml:space="preserve"
126+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
127+ x="243"
128+ y="409.36221"
129+ id="text5342"
130+ sodipodi:linespacing="125%"
131+ inkscape:export-xdpi="61.120499"
132+ inkscape:export-ydpi="61.120499"><tspan
133+ sodipodi:role="line"
134+ id="tspan5344"
135+ x="243"
136+ y="409.36221"
137+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">Term Elaborator</tspan></text>
138+ </g>
139+</svg>
docs/image/elabLogicEx1_1.pngnew file

Binary file not shown.

docs/image/elabLogicEx1_1.svgnew file+99
@@ -0,0 +1,99 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="elabLogicEx1_1.svg"
19+ inkscape:export-filename="/home/mjb/Idris-dev/docs/image/elabLogicEx1_1.png"
20+ inkscape:export-xdpi="61.120499"
21+ inkscape:export-ydpi="61.120499">
22+ <defs
23+ id="defs4" />
24+ <sodipodi:namedview
25+ id="base"
26+ pagecolor="#ffffff"
27+ bordercolor="#666666"
28+ borderopacity="1.0"
29+ inkscape:pageopacity="0.0"
30+ inkscape:pageshadow="2"
31+ inkscape:zoom="1"
32+ inkscape:cx="97.25613"
33+ inkscape:cy="593.17666"
34+ inkscape:document-units="px"
35+ inkscape:current-layer="layer1"
36+ showgrid="false"
37+ inkscape:window-width="1920"
38+ inkscape:window-height="1015"
39+ inkscape:window-x="0"
40+ inkscape:window-y="0"
41+ inkscape:window-maximized="1" />
42+ <metadata
43+ id="metadata7">
44+ <rdf:RDF>
45+ <cc:Work
46+ rdf:about="">
47+ <dc:format>image/svg+xml</dc:format>
48+ <dc:type
49+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50+ <dc:title />
51+ </cc:Work>
52+ </rdf:RDF>
53+ </metadata>
54+ <g
55+ inkscape:label="Layer 1"
56+ inkscape:groupmode="layer"
57+ id="layer1">
58+ <text
59+ id="text4800"
60+ y="473.36218"
61+ x="205"
62+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
63+ xml:space="preserve"
64+ inkscape:export-xdpi="61.120499"
65+ inkscape:export-ydpi="61.120499"><tspan
66+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
67+ y="473.36218"
68+ x="205"
69+ sodipodi:role="line"
70+ id="tspan4812">hole_2 : pi_arg : Nat -&gt; Nat</tspan></text>
71+ <text
72+ inkscape:export-ydpi="61.120499"
73+ inkscape:export-xdpi="61.120499"
74+ xml:space="preserve"
75+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
76+ x="428.125"
77+ y="472.23718"
78+ id="text4178"><tspan
79+ id="tspan4180"
80+ sodipodi:role="line"
81+ x="428.125"
82+ y="472.23718"
83+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">hole_0 : pi_arg : Nat -&gt; Nat</tspan></text>
84+ <path
85+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
86+ d="m 423.125,456.2372 185,-1"
87+ id="path4182"
88+ inkscape:connector-curvature="0"
89+ inkscape:export-xdpi="61.120499"
90+ inkscape:export-ydpi="61.120499" />
91+ <path
92+ inkscape:connector-curvature="0"
93+ id="path4184"
94+ d="m 200,456.3622 185,-1"
95+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
96+ inkscape:export-xdpi="61.120499"
97+ inkscape:export-ydpi="61.120499" />
98+ </g>
99+</svg>
docs/image/elabLogicEx1_2.pngnew file

Binary file not shown.

docs/image/elabLogicEx1_2.svgnew file+112
@@ -0,0 +1,112 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="elabLogicEx1_2.svg"
19+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/elabLogicEx1_1.png"
20+ inkscape:export-xdpi="61.120499"
21+ inkscape:export-ydpi="61.120499">
22+ <defs
23+ id="defs4" />
24+ <sodipodi:namedview
25+ id="base"
26+ pagecolor="#ffffff"
27+ bordercolor="#666666"
28+ borderopacity="1.0"
29+ inkscape:pageopacity="0.0"
30+ inkscape:pageshadow="2"
31+ inkscape:zoom="1"
32+ inkscape:cx="425.25613"
33+ inkscape:cy="593.17666"
34+ inkscape:document-units="px"
35+ inkscape:current-layer="layer1"
36+ showgrid="false"
37+ inkscape:window-width="1920"
38+ inkscape:window-height="1015"
39+ inkscape:window-x="0"
40+ inkscape:window-y="0"
41+ inkscape:window-maximized="1" />
42+ <metadata
43+ id="metadata7">
44+ <rdf:RDF>
45+ <cc:Work
46+ rdf:about="">
47+ <dc:format>image/svg+xml</dc:format>
48+ <dc:type
49+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50+ <dc:title />
51+ </cc:Work>
52+ </rdf:RDF>
53+ </metadata>
54+ <g
55+ inkscape:label="Layer 1"
56+ inkscape:groupmode="layer"
57+ id="layer1">
58+ <text
59+ id="text4800"
60+ y="473.36218"
61+ x="205"
62+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
63+ xml:space="preserve"
64+ inkscape:export-xdpi="61.120499"
65+ inkscape:export-ydpi="61.120499"><tspan
66+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
67+ y="473.36218"
68+ x="205"
69+ sodipodi:role="line"
70+ id="tspan4812">hole_2 : Nat</tspan></text>
71+ <text
72+ inkscape:export-ydpi="61.120499"
73+ inkscape:export-xdpi="61.120499"
74+ xml:space="preserve"
75+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
76+ x="422.5"
77+ y="472.23718"
78+ id="text4178"><tspan
79+ id="tspan4180"
80+ sodipodi:role="line"
81+ x="422.5"
82+ y="472.23718"
83+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">hole_0 : (pi_arg : Nat) -&gt; Nat</tspan></text>
84+ <path
85+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
86+ d="m 417.5,456.2372 185,-1"
87+ id="path4182"
88+ inkscape:connector-curvature="0"
89+ inkscape:export-xdpi="61.120499"
90+ inkscape:export-ydpi="61.120499" />
91+ <path
92+ inkscape:connector-curvature="0"
93+ id="path4184"
94+ d="m 200,456.3622 185,-1"
95+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
96+ inkscape:export-xdpi="61.120499"
97+ inkscape:export-ydpi="61.120499" />
98+ <text
99+ inkscape:export-ydpi="61.120499"
100+ inkscape:export-xdpi="61.120499"
101+ xml:space="preserve"
102+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
103+ x="229"
104+ y="447.36218"
105+ id="text4147"><tspan
106+ id="tspan4149"
107+ sodipodi:role="line"
108+ x="229"
109+ y="447.36218"
110+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">x : Nat</tspan></text>
111+ </g>
112+</svg>
docs/image/elabLogicEx1_3.pngnew file

Binary file not shown.

docs/image/elabLogicEx1_3.svgnew file+112
@@ -0,0 +1,112 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="elabLogicEx1_3.svg"
19+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/elabLogicEx1_1.png"
20+ inkscape:export-xdpi="61.120499"
21+ inkscape:export-ydpi="61.120499">
22+ <defs
23+ id="defs4" />
24+ <sodipodi:namedview
25+ id="base"
26+ pagecolor="#ffffff"
27+ bordercolor="#666666"
28+ borderopacity="1.0"
29+ inkscape:pageopacity="0.0"
30+ inkscape:pageshadow="2"
31+ inkscape:zoom="1"
32+ inkscape:cx="425.25613"
33+ inkscape:cy="593.17666"
34+ inkscape:document-units="px"
35+ inkscape:current-layer="layer1"
36+ showgrid="false"
37+ inkscape:window-width="1920"
38+ inkscape:window-height="1015"
39+ inkscape:window-x="0"
40+ inkscape:window-y="0"
41+ inkscape:window-maximized="1" />
42+ <metadata
43+ id="metadata7">
44+ <rdf:RDF>
45+ <cc:Work
46+ rdf:about="">
47+ <dc:format>image/svg+xml</dc:format>
48+ <dc:type
49+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50+ <dc:title />
51+ </cc:Work>
52+ </rdf:RDF>
53+ </metadata>
54+ <g
55+ inkscape:label="Layer 1"
56+ inkscape:groupmode="layer"
57+ id="layer1">
58+ <text
59+ id="text4800"
60+ y="473.36218"
61+ x="205"
62+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
63+ xml:space="preserve"
64+ inkscape:export-xdpi="61.120499"
65+ inkscape:export-ydpi="61.120499"><tspan
66+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
67+ y="473.36218"
68+ x="205"
69+ sodipodi:role="line"
70+ id="tspan4812">hole_2 : Nat</tspan></text>
71+ <text
72+ inkscape:export-ydpi="61.120499"
73+ inkscape:export-xdpi="61.120499"
74+ xml:space="preserve"
75+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
76+ x="439.375"
77+ y="472.23718"
78+ id="text4178"><tspan
79+ id="tspan4180"
80+ sodipodi:role="line"
81+ x="439.375"
82+ y="472.23718"
83+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">hole_0 : (pi_arg : Nat) -&gt; Nat</tspan></text>
84+ <path
85+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
86+ d="m 434.375,456.2372 185,-1"
87+ id="path4182"
88+ inkscape:connector-curvature="0"
89+ inkscape:export-xdpi="61.120499"
90+ inkscape:export-ydpi="61.120499" />
91+ <path
92+ inkscape:connector-curvature="0"
93+ id="path4184"
94+ d="m 200,456.3622 185,-1"
95+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
96+ inkscape:export-xdpi="61.120499"
97+ inkscape:export-ydpi="61.120499" />
98+ <text
99+ inkscape:export-ydpi="61.120499"
100+ inkscape:export-xdpi="61.120499"
101+ xml:space="preserve"
102+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
103+ x="229"
104+ y="447.36218"
105+ id="text4147"><tspan
106+ id="tspan4149"
107+ sodipodi:role="line"
108+ x="229"
109+ y="447.36218"
110+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">x : Nat</tspan></text>
111+ </g>
112+</svg>
docs/image/elabLogicEx1_4.pngnew file

Binary file not shown.

docs/image/elabLogicEx1_4.svgnew file+80
@@ -0,0 +1,80 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="elabLogicEx1_4.svg"
19+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/elabLogicEx1_1.png"
20+ inkscape:export-xdpi="61.120499"
21+ inkscape:export-ydpi="61.120499">
22+ <defs
23+ id="defs4" />
24+ <sodipodi:namedview
25+ id="base"
26+ pagecolor="#ffffff"
27+ bordercolor="#666666"
28+ borderopacity="1.0"
29+ inkscape:pageopacity="0.0"
30+ inkscape:pageshadow="2"
31+ inkscape:zoom="1"
32+ inkscape:cx="425.25613"
33+ inkscape:cy="593.17666"
34+ inkscape:document-units="px"
35+ inkscape:current-layer="layer1"
36+ showgrid="false"
37+ inkscape:window-width="1157"
38+ inkscape:window-height="1011"
39+ inkscape:window-x="-4"
40+ inkscape:window-y="0"
41+ inkscape:window-maximized="0" />
42+ <metadata
43+ id="metadata7">
44+ <rdf:RDF>
45+ <cc:Work
46+ rdf:about="">
47+ <dc:format>image/svg+xml</dc:format>
48+ <dc:type
49+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50+ <dc:title />
51+ </cc:Work>
52+ </rdf:RDF>
53+ </metadata>
54+ <g
55+ inkscape:label="Layer 1"
56+ inkscape:groupmode="layer"
57+ id="layer1">
58+ <text
59+ inkscape:export-ydpi="61.120499"
60+ inkscape:export-xdpi="61.120499"
61+ xml:space="preserve"
62+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
63+ x="205"
64+ y="500.36218"
65+ id="text4178"
66+ sodipodi:linespacing="125%"><tspan
67+ id="tspan4180"
68+ sodipodi:role="line"
69+ x="205"
70+ y="500.36218"
71+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">hole_0 : (pi_arg : Nat) -&gt; Nat</tspan></text>
72+ <path
73+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
74+ d="m 200,484.3622 185,-1"
75+ id="path4182"
76+ inkscape:connector-curvature="0"
77+ inkscape:export-xdpi="61.120499"
78+ inkscape:export-ydpi="61.120499" />
79+ </g>
80+</svg>
docs/image/elabOverview.pngnew file

Binary file not shown.

docs/image/elabOverview.svgnew file+585
@@ -0,0 +1,585 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="elabOverview.svg"
19+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/data.png"
20+ inkscape:export-xdpi="61.120499"
21+ inkscape:export-ydpi="61.120499">
22+ <defs
23+ id="defs4">
24+ <marker
25+ inkscape:stockid="Arrow1Mend"
26+ orient="auto"
27+ refY="0.0"
28+ refX="0.0"
29+ id="marker4738"
30+ style="overflow:visible;"
31+ inkscape:isstock="true">
32+ <path
33+ id="path4491"
34+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
35+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
36+ transform="scale(0.4) rotate(180) translate(10,0)" />
37+ </marker>
38+ <marker
39+ inkscape:stockid="Arrow1Mend"
40+ orient="auto"
41+ refY="0.0"
42+ refX="0.0"
43+ id="marker4672"
44+ style="overflow:visible;"
45+ inkscape:isstock="true">
46+ <path
47+ id="path4425"
48+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
49+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
50+ transform="scale(0.4) rotate(180) translate(10,0)" />
51+ </marker>
52+ <marker
53+ inkscape:stockid="Arrow1Mend"
54+ orient="auto"
55+ refY="0.0"
56+ refX="0.0"
57+ id="Arrow1Mend"
58+ style="overflow:visible;"
59+ inkscape:isstock="true">
60+ <path
61+ id="path4418"
62+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
63+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
64+ transform="scale(0.4) rotate(180) translate(10,0)" />
65+ </marker>
66+ <marker
67+ inkscape:stockid="Arrow1Mend"
68+ orient="auto"
69+ refY="0"
70+ refX="0"
71+ id="marker5018"
72+ style="overflow:visible"
73+ inkscape:isstock="true">
74+ <path
75+ inkscape:connector-curvature="0"
76+ id="path5020"
77+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
78+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
79+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
80+ </marker>
81+ </defs>
82+ <sodipodi:namedview
83+ id="base"
84+ pagecolor="#ffffff"
85+ bordercolor="#666666"
86+ borderopacity="1.0"
87+ inkscape:pageopacity="0.0"
88+ inkscape:pageshadow="2"
89+ inkscape:zoom="1"
90+ inkscape:cx="258.17464"
91+ inkscape:cy="544.34419"
92+ inkscape:document-units="px"
93+ inkscape:current-layer="layer1"
94+ showgrid="false"
95+ inkscape:window-width="1920"
96+ inkscape:window-height="1015"
97+ inkscape:window-x="0"
98+ inkscape:window-y="0"
99+ inkscape:window-maximized="1" />
100+ <metadata
101+ id="metadata7">
102+ <rdf:RDF>
103+ <cc:Work
104+ rdf:about="">
105+ <dc:format>image/svg+xml</dc:format>
106+ <dc:type
107+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
108+ <dc:title />
109+ </cc:Work>
110+ </rdf:RDF>
111+ </metadata>
112+ <g
113+ inkscape:label="Layer 1"
114+ inkscape:groupmode="layer"
115+ id="layer1">
116+ <text
117+ xml:space="preserve"
118+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
119+ x="268"
120+ y="495.36218"
121+ id="text4136"
122+ sodipodi:linespacing="125%"
123+ inkscape:export-xdpi="61.120499"
124+ inkscape:export-ydpi="61.120499"><tspan
125+ sodipodi:role="line"
126+ id="tspan4138"
127+ x="268"
128+ y="495.36218"
129+ style="font-size:12.5px">data TT : Type where</tspan><tspan
130+ sodipodi:role="line"
131+ x="268"
132+ y="510.98718"
133+ id="tspan4140"
134+ style="font-size:12.5px"> P : NameType -&gt; TTName -&gt; TT -&gt; TT</tspan><tspan
135+ sodipodi:role="line"
136+ x="268"
137+ y="526.61218"
138+ style="font-size:12.5px"
139+ id="tspan4142"> V : Int -&gt; TT</tspan><tspan
140+ sodipodi:role="line"
141+ x="268"
142+ y="542.23718"
143+ style="font-size:12.5px"
144+ id="tspan4144"> Bind : TTName -&gt; Binder TT -&gt; TT -&gt; TT</tspan><tspan
145+ sodipodi:role="line"
146+ x="268"
147+ y="557.86218"
148+ style="font-size:12.5px"
149+ id="tspan4146"> App : TT -&gt; TT -&gt; TT</tspan><tspan
150+ sodipodi:role="line"
151+ x="268"
152+ y="573.48718"
153+ style="font-size:12.5px"
154+ id="tspan4148"> TConst : Const -&gt; TT</tspan><tspan
155+ sodipodi:role="line"
156+ x="268"
157+ y="589.11218"
158+ style="font-size:12.5px"
159+ id="tspan4150"> Erased : TT</tspan><tspan
160+ sodipodi:role="line"
161+ x="268"
162+ y="604.73718"
163+ style="font-size:12.5px"
164+ id="tspan4152"> TType : TTUExp -&gt; TT</tspan><tspan
165+ sodipodi:role="line"
166+ x="268"
167+ y="620.36218"
168+ style="font-size:12.5px"
169+ id="tspan4154"> UType : Universe -&gt; TT</tspan></text>
170+ <text
171+ sodipodi:linespacing="125%"
172+ id="text4156"
173+ y="485.36218"
174+ x="509"
175+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
176+ xml:space="preserve"
177+ inkscape:export-xdpi="61.120499"
178+ inkscape:export-ydpi="61.120499"><tspan
179+ id="tspan4174"
180+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
181+ y="485.36218"
182+ x="509"
183+ sodipodi:role="line">globally defined variable</tspan><tspan
184+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
185+ y="500.98718"
186+ x="509"
187+ sodipodi:role="line"
188+ id="tspan4197"> from name</tspan></text>
189+ <path
190+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
191+ d="m 486,500.3622 19,-14"
192+ id="path4220"
193+ inkscape:connector-curvature="0"
194+ inkscape:export-xdpi="61.120499"
195+ inkscape:export-ydpi="61.120499"
196+ sodipodi:nodetypes="cc" />
197+ <text
198+ xml:space="preserve"
199+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
200+ x="392"
201+ y="526.36218"
202+ id="text4222"
203+ sodipodi:linespacing="125%"
204+ inkscape:export-xdpi="61.120499"
205+ inkscape:export-ydpi="61.120499"><tspan
206+ sodipodi:role="line"
207+ x="392"
208+ y="526.36218"
209+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
210+ id="tspan4224">local (de Bruijn) variable</tspan></text>
211+ <path
212+ inkscape:connector-curvature="0"
213+ id="path4226"
214+ d="m 351,524.3622 34,-4"
215+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
216+ sodipodi:nodetypes="cc"
217+ inkscape:export-xdpi="61.120499"
218+ inkscape:export-ydpi="61.120499" />
219+ <text
220+ xml:space="preserve"
221+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
222+ x="537"
223+ y="533.36218"
224+ id="text4228"
225+ sodipodi:linespacing="125%"
226+ inkscape:export-xdpi="61.120499"
227+ inkscape:export-ydpi="61.120499"><tspan
228+ sodipodi:role="line"
229+ x="537"
230+ y="533.36218"
231+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
232+ id="tspan4230">any kind of binder</tspan><tspan
233+ sodipodi:role="line"
234+ x="537"
235+ y="548.98718"
236+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
237+ id="tspan4234">lambda, let etc.</tspan></text>
238+ <path
239+ inkscape:connector-curvature="0"
240+ id="path4232"
241+ d="m 494,538.3622 39,-8"
242+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
243+ inkscape:export-xdpi="61.120499"
244+ inkscape:export-ydpi="61.120499"
245+ sodipodi:nodetypes="cc" />
246+ <text
247+ xml:space="preserve"
248+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
249+ x="417"
250+ y="555.36218"
251+ id="text4236"
252+ sodipodi:linespacing="125%"
253+ inkscape:export-xdpi="61.120499"
254+ inkscape:export-ydpi="61.120499"><tspan
255+ sodipodi:role="line"
256+ x="417"
257+ y="555.36218"
258+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
259+ id="tspan4238">function application</tspan></text>
260+ <path
261+ inkscape:connector-curvature="0"
262+ id="path4240"
263+ d="m 392,554.3622 22,-2"
264+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
265+ sodipodi:nodetypes="cc"
266+ inkscape:export-xdpi="61.120499"
267+ inkscape:export-ydpi="61.120499" />
268+ <text
269+ sodipodi:linespacing="125%"
270+ id="text4253"
271+ y="569.36218"
272+ x="421"
273+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
274+ xml:space="preserve"
275+ inkscape:export-xdpi="61.120499"
276+ inkscape:export-ydpi="61.120499"><tspan
277+ id="tspan4255"
278+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
279+ y="569.36218"
280+ x="421"
281+ sodipodi:role="line">intager, char, string, etc.</tspan></text>
282+ <path
283+ sodipodi:nodetypes="cc"
284+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
285+ d="m 396,568.3622 22,-2"
286+ id="path4257"
287+ inkscape:connector-curvature="0"
288+ inkscape:export-xdpi="61.120499"
289+ inkscape:export-ydpi="61.120499" />
290+ <text
291+ xml:space="preserve"
292+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
293+ x="374"
294+ y="586.36218"
295+ id="text4270"
296+ sodipodi:linespacing="125%"
297+ inkscape:export-xdpi="61.120499"
298+ inkscape:export-ydpi="61.120499"><tspan
299+ sodipodi:role="line"
300+ x="374"
301+ y="586.36218"
302+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
303+ id="tspan4272">unknown term for erasing types</tspan></text>
304+ <path
305+ inkscape:connector-curvature="0"
306+ id="path4274"
307+ d="m 349,585.3622 22,-2"
308+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
309+ sodipodi:nodetypes="cc"
310+ inkscape:export-xdpi="61.120499"
311+ inkscape:export-ydpi="61.120499" />
312+ <text
313+ sodipodi:linespacing="125%"
314+ id="text4276"
315+ y="603.36218"
316+ x="429"
317+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
318+ xml:space="preserve"
319+ inkscape:export-xdpi="61.120499"
320+ inkscape:export-ydpi="61.120499"><tspan
321+ id="tspan4278"
322+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
323+ y="603.36218"
324+ x="429"
325+ sodipodi:role="line">type of types</tspan></text>
326+ <path
327+ sodipodi:nodetypes="cc"
328+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
329+ d="m 404,602.3622 22,-2"
330+ id="path4280"
331+ inkscape:connector-curvature="0"
332+ inkscape:export-xdpi="61.120499"
333+ inkscape:export-ydpi="61.120499" />
334+ <text
335+ xml:space="preserve"
336+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
337+ x="433"
338+ y="619.36218"
339+ id="text4293"
340+ sodipodi:linespacing="125%"
341+ inkscape:export-xdpi="61.120499"
342+ inkscape:export-ydpi="61.120499"><tspan
343+ sodipodi:role="line"
344+ x="433"
345+ y="619.36218"
346+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
347+ id="tspan4295">unique universe</tspan></text>
348+ <path
349+ inkscape:connector-curvature="0"
350+ id="path4297"
351+ d="m 408,618.3622 22,-2"
352+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
353+ sodipodi:nodetypes="cc"
354+ inkscape:export-xdpi="61.120499"
355+ inkscape:export-ydpi="61.120499" />
356+ <text
357+ sodipodi:linespacing="125%"
358+ id="text4397"
359+ y="463.36218"
360+ x="375"
361+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
362+ xml:space="preserve"
363+ inkscape:export-xdpi="61.120499"
364+ inkscape:export-ydpi="61.120499"><tspan
365+ id="tspan4399"
366+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff"
367+ y="463.36218"
368+ x="375"
369+ sodipodi:role="line">elements of core language</tspan></text>
370+ <rect
371+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
372+ id="rect4400"
373+ width="392"
374+ height="185"
375+ x="262"
376+ y="447.36218"
377+ inkscape:export-xdpi="61.120499"
378+ inkscape:export-ydpi="61.120499" />
379+ <text
380+ xml:space="preserve"
381+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
382+ x="264"
383+ y="466.36218"
384+ id="text4402"
385+ sodipodi:linespacing="125%"
386+ inkscape:export-xdpi="61.120499"
387+ inkscape:export-ydpi="61.120499"><tspan
388+ sodipodi:role="line"
389+ id="tspan4404"
390+ x="264"
391+ y="466.36218"
392+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">TT</tspan></text>
393+ <text
394+ inkscape:export-ydpi="61.120499"
395+ inkscape:export-xdpi="61.120499"
396+ sodipodi:linespacing="125%"
397+ id="text4328"
398+ y="262.36218"
399+ x="96"
400+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
401+ xml:space="preserve"><tspan
402+ id="tspan4346"
403+ style="font-size:12.5px"
404+ y="262.36218"
405+ x="96"
406+ sodipodi:role="line">env</tspan><tspan
407+ style="font-size:12.5px"
408+ y="277.98718"
409+ x="96"
410+ sodipodi:role="line"
411+ id="tspan4454">goal</tspan><tspan
412+ style="font-size:12.5px"
413+ y="293.61218"
414+ x="96"
415+ sodipodi:role="line"
416+ id="tspan4456">holes</tspan><tspan
417+ style="font-size:12.5px"
418+ y="309.23718"
419+ x="96"
420+ sodipodi:role="line"
421+ id="tspan4458">guess</tspan></text>
422+ <text
423+ inkscape:export-ydpi="61.120499"
424+ inkscape:export-xdpi="61.120499"
425+ xml:space="preserve"
426+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
427+ x="163"
428+ y="262.36218"
429+ id="text4348"
430+ sodipodi:linespacing="125%"><tspan
431+ id="tspan4352"
432+ sodipodi:role="line"
433+ x="163"
434+ y="262.36218"
435+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000">Elab (List (TTName, Binder TT)</tspan><tspan
436+ sodipodi:role="line"
437+ x="163"
438+ y="277.98718"
439+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
440+ id="tspan4462">Elab (TTName,TT)</tspan><tspan
441+ sodipodi:role="line"
442+ x="163"
443+ y="293.61218"
444+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
445+ id="tspan4464">Elab (List TTName)</tspan><tspan
446+ sodipodi:role="line"
447+ x="163"
448+ y="309.23718"
449+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
450+ id="tspan4466">Elab (TT)</tspan></text>
451+ <path
452+ inkscape:export-ydpi="61.120499"
453+ inkscape:export-xdpi="61.120499"
454+ sodipodi:nodetypes="cc"
455+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
456+ d="M 124.13676,260.36509 158,260.3622"
457+ id="path4360"
458+ inkscape:connector-curvature="0" />
459+ <text
460+ inkscape:export-ydpi="61.120499"
461+ inkscape:export-xdpi="61.120499"
462+ xml:space="preserve"
463+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
464+ x="64"
465+ y="286.36218"
466+ id="text4400"
467+ sodipodi:linespacing="125%"><tspan
468+ sodipodi:role="line"
469+ x="64"
470+ y="286.36218"
471+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff"
472+ id="tspan4402">state</tspan></text>
473+ <rect
474+ inkscape:export-ydpi="61.120499"
475+ inkscape:export-xdpi="61.120499"
476+ y="219.36218"
477+ x="53"
478+ height="224"
479+ width="289"
480+ id="rect4404"
481+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
482+ <text
483+ inkscape:export-ydpi="61.120499"
484+ inkscape:export-xdpi="61.120499"
485+ sodipodi:linespacing="125%"
486+ id="text4406"
487+ y="238.36218"
488+ x="55"
489+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
490+ xml:space="preserve"><tspan
491+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
492+ y="238.36218"
493+ x="55"
494+ id="tspan4408"
495+ sodipodi:role="line">Elab Monad</tspan></text>
496+ <path
497+ inkscape:connector-curvature="0"
498+ id="path4468"
499+ d="M 124.13676,274.36509 158,274.3622"
500+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
501+ sodipodi:nodetypes="cc"
502+ inkscape:export-xdpi="61.120499"
503+ inkscape:export-ydpi="61.120499" />
504+ <path
505+ inkscape:export-ydpi="61.120499"
506+ inkscape:export-xdpi="61.120499"
507+ sodipodi:nodetypes="cc"
508+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
509+ d="M 128.13676,288.36509 158,288.3622"
510+ id="path4470"
511+ inkscape:connector-curvature="0" />
512+ <path
513+ inkscape:connector-curvature="0"
514+ id="path4472"
515+ d="M 132.13676,304.36509 158,304.3622"
516+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
517+ sodipodi:nodetypes="cc"
518+ inkscape:export-xdpi="61.120499"
519+ inkscape:export-ydpi="61.120499" />
520+ <path
521+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4738)"
522+ d="m 275,272.3622 c 75.17677,4.63671 121.00356,120.13548 126,174"
523+ id="path4476"
524+ inkscape:connector-curvature="0"
525+ sodipodi:nodetypes="cc"
526+ inkscape:export-xdpi="61.120499"
527+ inkscape:export-ydpi="61.120499" />
528+ <path
529+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
530+ d="m 189,320.3622 c 50.81716,51.06633 -107.1143,53.76268 -56,0"
531+ id="path12613"
532+ inkscape:connector-curvature="0"
533+ sodipodi:nodetypes="cc"
534+ inkscape:export-xdpi="61.120499"
535+ inkscape:export-ydpi="61.120499" />
536+ <text
537+ xml:space="preserve"
538+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
539+ x="147"
540+ y="373.36218"
541+ id="text15201"
542+ sodipodi:linespacing="125%"
543+ inkscape:export-xdpi="61.120499"
544+ inkscape:export-ydpi="61.120499"><tspan
545+ id="tspan15209"
546+ sodipodi:role="line"
547+ x="147"
548+ y="373.36218"
549+ style="font-size:12.5px">solve</tspan><tspan
550+ sodipodi:role="line"
551+ x="147"
552+ y="388.98718"
553+ style="font-size:12.5px"
554+ id="tspan15220">fill</tspan><tspan
555+ sodipodi:role="line"
556+ x="147"
557+ y="404.61218"
558+ style="font-size:12.5px"
559+ id="tspan15222">apply</tspan><tspan
560+ sodipodi:role="line"
561+ x="147"
562+ y="420.23718"
563+ style="font-size:12.5px"
564+ id="tspan15224">focus</tspan><tspan
565+ sodipodi:role="line"
566+ x="147"
567+ y="435.86218"
568+ style="font-size:12.5px"
569+ id="tspan15226">...</tspan></text>
570+ <text
571+ sodipodi:linespacing="125%"
572+ id="text18672"
573+ y="396.36218"
574+ x="94"
575+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
576+ xml:space="preserve"
577+ inkscape:export-xdpi="61.120499"
578+ inkscape:export-ydpi="61.120499"><tspan
579+ id="tspan18674"
580+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff"
581+ y="396.36218"
582+ x="94"
583+ sodipodi:role="line">tactics</tspan></text>
584+ </g>
585+</svg>
docs/image/elabProofState.pngnew file

Binary file not shown.

docs/image/elabProofState.svgnew file+356
@@ -0,0 +1,356 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="elabProofState.svg">
19+ <defs
20+ id="defs4" />
21+ <sodipodi:namedview
22+ id="base"
23+ pagecolor="#ffffff"
24+ bordercolor="#666666"
25+ borderopacity="1.0"
26+ inkscape:pageopacity="0.0"
27+ inkscape:pageshadow="2"
28+ inkscape:zoom="1"
29+ inkscape:cx="252.75613"
30+ inkscape:cy="520"
31+ inkscape:document-units="px"
32+ inkscape:current-layer="layer1"
33+ showgrid="false"
34+ inkscape:window-width="1920"
35+ inkscape:window-height="1015"
36+ inkscape:window-x="0"
37+ inkscape:window-y="0"
38+ inkscape:window-maximized="1" />
39+ <metadata
40+ id="metadata7">
41+ <rdf:RDF>
42+ <cc:Work
43+ rdf:about="">
44+ <dc:format>image/svg+xml</dc:format>
45+ <dc:type
46+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47+ <dc:title />
48+ </cc:Work>
49+ </rdf:RDF>
50+ </metadata>
51+ <g
52+ inkscape:label="Layer 1"
53+ inkscape:groupmode="layer"
54+ id="layer1">
55+ <text
56+ sodipodi:linespacing="125%"
57+ id="text4148"
58+ y="330.36218"
59+ x="219"
60+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
61+ xml:space="preserve"
62+ inkscape:export-xdpi="61.120499"
63+ inkscape:export-ydpi="61.120499"><tspan
64+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
65+ y="330.36218"
66+ x="219"
67+ id="tspan4150"
68+ sodipodi:role="line">current proof</tspan><tspan
69+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
70+ y="349.11218"
71+ x="219"
72+ sodipodi:role="line"
73+ id="tspan4206"> term</tspan></text>
74+ <text
75+ xml:space="preserve"
76+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
77+ x="240"
78+ y="303.36218"
79+ id="text4160"
80+ sodipodi:linespacing="125%"
81+ inkscape:export-xdpi="61.120499"
82+ inkscape:export-ydpi="61.120499"><tspan
83+ sodipodi:role="line"
84+ id="tspan4162"
85+ x="240"
86+ y="303.36218"
87+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">(TTName, TT)</tspan></text>
88+ <text
89+ sodipodi:linespacing="125%"
90+ id="text4202"
91+ y="392.36218"
92+ x="355"
93+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
94+ xml:space="preserve"
95+ inkscape:export-xdpi="61.120499"
96+ inkscape:export-ydpi="61.120499"><tspan
97+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
98+ y="392.36218"
99+ x="355"
100+ id="tspan4204"
101+ sodipodi:role="line">original goal</tspan></text>
102+ <text
103+ xml:space="preserve"
104+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
105+ x="213"
106+ y="377.36218"
107+ id="text4208"
108+ sodipodi:linespacing="125%"
109+ inkscape:export-xdpi="61.120499"
110+ inkscape:export-ydpi="61.120499"><tspan
111+ id="tspan4212"
112+ sodipodi:role="line"
113+ x="213"
114+ y="377.36218"
115+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">path</tspan><tspan
116+ sodipodi:role="line"
117+ x="213"
118+ y="396.11218"
119+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
120+ id="tspan4216">subterm</tspan><tspan
121+ sodipodi:role="line"
122+ x="213"
123+ y="414.86218"
124+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
125+ id="tspan4218">updates</tspan></text>
126+ <text
127+ sodipodi:linespacing="125%"
128+ id="text4230"
129+ y="487.36218"
130+ x="148"
131+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
132+ xml:space="preserve"
133+ inkscape:export-xdpi="61.120499"
134+ inkscape:export-ydpi="61.120499"><tspan
135+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
136+ y="487.36218"
137+ x="148"
138+ sodipodi:role="line"
139+ id="tspan4243">Contexts used for global definitions and for proof state.</tspan><tspan
140+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
141+ y="506.11218"
142+ x="148"
143+ sodipodi:role="line"
144+ id="tspan4190">They contain universe constraints and existing definitions.</tspan><tspan
145+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
146+ y="524.86218"
147+ x="148"
148+ sodipodi:role="line"
149+ id="tspan4253">Also store maximum RigCount of the namel</tspan></text>
150+ <text
151+ inkscape:export-ydpi="61.120499"
152+ inkscape:export-xdpi="61.120499"
153+ sodipodi:linespacing="125%"
154+ id="text4173"
155+ y="198.36218"
156+ x="135"
157+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
158+ xml:space="preserve"><tspan
159+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
160+ y="198.36218"
161+ x="135"
162+ id="tspan4175"
163+ sodipodi:role="line">Environment</tspan></text>
164+ <text
165+ xml:space="preserve"
166+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
167+ x="350"
168+ y="197.36218"
169+ id="text4177"
170+ sodipodi:linespacing="125%"
171+ inkscape:export-xdpi="61.120499"
172+ inkscape:export-ydpi="61.120499"><tspan
173+ sodipodi:role="line"
174+ id="tspan4179"
175+ x="350"
176+ y="197.36218"
177+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1">Holes</tspan></text>
178+ <text
179+ inkscape:export-ydpi="61.120499"
180+ inkscape:export-xdpi="61.120499"
181+ sodipodi:linespacing="125%"
182+ id="text4181"
183+ y="197.36218"
184+ x="460"
185+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
186+ xml:space="preserve"><tspan
187+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
188+ y="197.36218"
189+ x="460"
190+ id="tspan4183"
191+ sodipodi:role="line">Guess</tspan></text>
192+ <text
193+ inkscape:export-ydpi="61.120499"
194+ inkscape:export-xdpi="61.120499"
195+ sodipodi:linespacing="125%"
196+ id="text4185"
197+ y="199.36218"
198+ x="247"
199+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
200+ xml:space="preserve"><tspan
201+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
202+ y="199.36218"
203+ x="247"
204+ id="tspan4187"
205+ sodipodi:role="line">Goal</tspan></text>
206+ <rect
207+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
208+ id="rect4189"
209+ width="95"
210+ height="32"
211+ x="134"
212+ y="205.3622"
213+ inkscape:export-xdpi="61.120499"
214+ inkscape:export-ydpi="61.120499" />
215+ <rect
216+ y="205.3622"
217+ x="241"
218+ height="32"
219+ width="95"
220+ id="rect4191"
221+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
222+ inkscape:export-xdpi="61.120499"
223+ inkscape:export-ydpi="61.120499" />
224+ <rect
225+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
226+ id="rect4195"
227+ width="95"
228+ height="32"
229+ x="454"
230+ y="205.3622"
231+ inkscape:export-xdpi="61.120499"
232+ inkscape:export-ydpi="61.120499" />
233+ <rect
234+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
235+ id="rect4197"
236+ width="95"
237+ height="32"
238+ x="346"
239+ y="237.3622"
240+ inkscape:export-xdpi="61.120499"
241+ inkscape:export-ydpi="61.120499" />
242+ <rect
243+ y="269.36218"
244+ x="346"
245+ height="32"
246+ width="95"
247+ id="rect4199"
248+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
249+ inkscape:export-xdpi="61.120499"
250+ inkscape:export-ydpi="61.120499" />
251+ <rect
252+ y="205.3622"
253+ x="346"
254+ height="32"
255+ width="95"
256+ id="rect4201"
257+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
258+ inkscape:export-xdpi="61.120499"
259+ inkscape:export-ydpi="61.120499" />
260+ <path
261+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
262+ d="m 169,242.3622 -9,184"
263+ id="path4206"
264+ inkscape:connector-curvature="0"
265+ inkscape:export-xdpi="61.120499"
266+ inkscape:export-ydpi="61.120499"
267+ sodipodi:nodetypes="cc" />
268+ <path
269+ inkscape:connector-curvature="0"
270+ id="path4208"
271+ d="m 301,240.3622 -26,46"
272+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
273+ sodipodi:nodetypes="cc"
274+ inkscape:export-xdpi="61.120499"
275+ inkscape:export-ydpi="61.120499" />
276+ <text
277+ inkscape:export-ydpi="61.120499"
278+ inkscape:export-xdpi="61.120499"
279+ xml:space="preserve"
280+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
281+ x="360"
282+ y="366.36218"
283+ id="text4210"
284+ sodipodi:linespacing="125%"><tspan
285+ sodipodi:role="line"
286+ id="tspan4213"
287+ x="360"
288+ y="366.36218"
289+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">focus</tspan></text>
290+ <rect
291+ inkscape:export-ydpi="61.120499"
292+ inkscape:export-xdpi="61.120499"
293+ y="237.3622"
294+ x="134"
295+ height="32"
296+ width="95"
297+ id="rect4747"
298+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
299+ <rect
300+ inkscape:export-ydpi="61.120499"
301+ inkscape:export-xdpi="61.120499"
302+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
303+ id="rect4749"
304+ width="95"
305+ height="32"
306+ x="134"
307+ y="269.36218" />
308+ <text
309+ inkscape:export-ydpi="61.120499"
310+ inkscape:export-xdpi="61.120499"
311+ xml:space="preserve"
312+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
313+ x="148"
314+ y="450.36218"
315+ id="text4751"
316+ sodipodi:linespacing="125%"><tspan
317+ id="tspan4757"
318+ sodipodi:role="line"
319+ x="148"
320+ y="450.36218"
321+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">List (TTName, Binder TT)</tspan><tspan
322+ sodipodi:role="line"
323+ x="148"
324+ y="469.11218"
325+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
326+ id="tspan4182">Open unification constaints.</tspan></text>
327+ <text
328+ inkscape:export-ydpi="61.120499"
329+ inkscape:export-xdpi="61.120499"
330+ xml:space="preserve"
331+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
332+ x="349.25366"
333+ y="319.99084"
334+ id="text4210-3"
335+ sodipodi:linespacing="125%"><tspan
336+ sodipodi:role="line"
337+ id="tspan4213-6"
338+ x="349.25366"
339+ y="319.99084"
340+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">List TTName</tspan></text>
341+ <text
342+ sodipodi:linespacing="125%"
343+ id="text4782"
344+ y="251.99084"
345+ x="495.25366"
346+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
347+ xml:space="preserve"
348+ inkscape:export-xdpi="61.120499"
349+ inkscape:export-ydpi="61.120499"><tspan
350+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
351+ y="251.99084"
352+ x="495.25366"
353+ id="tspan4784"
354+ sodipodi:role="line">TT</tspan></text>
355+ </g>
356+</svg>
docs/image/elabProofStateEx1_1.pngnew file

Binary file not shown.

docs/image/elabProofStateEx1_1.svgnew file+312
@@ -0,0 +1,312 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="elabProofStateEx1_1.svg">
19+ <defs
20+ id="defs4" />
21+ <sodipodi:namedview
22+ id="base"
23+ pagecolor="#ffffff"
24+ bordercolor="#666666"
25+ borderopacity="1.0"
26+ inkscape:pageopacity="0.0"
27+ inkscape:pageshadow="2"
28+ inkscape:zoom="1"
29+ inkscape:cx="298"
30+ inkscape:cy="772.5"
31+ inkscape:document-units="px"
32+ inkscape:current-layer="layer1"
33+ showgrid="false"
34+ inkscape:window-width="1920"
35+ inkscape:window-height="1015"
36+ inkscape:window-x="0"
37+ inkscape:window-y="0"
38+ inkscape:window-maximized="1" />
39+ <metadata
40+ id="metadata7">
41+ <rdf:RDF>
42+ <cc:Work
43+ rdf:about="">
44+ <dc:format>image/svg+xml</dc:format>
45+ <dc:type
46+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47+ <dc:title />
48+ </cc:Work>
49+ </rdf:RDF>
50+ </metadata>
51+ <g
52+ inkscape:label="Layer 1"
53+ inkscape:groupmode="layer"
54+ id="layer1">
55+ <text
56+ sodipodi:linespacing="125%"
57+ id="text4140"
58+ y="226.36218"
59+ x="401"
60+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
61+ xml:space="preserve"
62+ inkscape:export-xdpi="61.120499"
63+ inkscape:export-ydpi="61.120499"><tspan
64+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
65+ y="226.36218"
66+ x="401"
67+ sodipodi:role="line"
68+ id="tspan4144">hole_2</tspan></text>
69+ <text
70+ inkscape:export-ydpi="61.120499"
71+ inkscape:export-xdpi="61.120499"
72+ sodipodi:linespacing="125%"
73+ id="text4173"
74+ y="198.36218"
75+ x="135"
76+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
77+ xml:space="preserve"><tspan
78+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
79+ y="198.36218"
80+ x="135"
81+ id="tspan4175"
82+ sodipodi:role="line">Environment</tspan></text>
83+ <text
84+ xml:space="preserve"
85+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
86+ x="393"
87+ y="197.36218"
88+ id="text4177"
89+ sodipodi:linespacing="125%"
90+ inkscape:export-xdpi="61.120499"
91+ inkscape:export-ydpi="61.120499"><tspan
92+ sodipodi:role="line"
93+ id="tspan4179"
94+ x="393"
95+ y="197.36218"
96+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1">Holes</tspan></text>
97+ <text
98+ inkscape:export-ydpi="61.120499"
99+ inkscape:export-xdpi="61.120499"
100+ sodipodi:linespacing="125%"
101+ id="text4181"
102+ y="197.36218"
103+ x="503"
104+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
105+ xml:space="preserve"><tspan
106+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
107+ y="197.36218"
108+ x="503"
109+ id="tspan4183"
110+ sodipodi:role="line">Guess</tspan></text>
111+ <text
112+ inkscape:export-ydpi="61.120499"
113+ inkscape:export-xdpi="61.120499"
114+ sodipodi:linespacing="125%"
115+ id="text4185"
116+ y="199.36218"
117+ x="247"
118+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
119+ xml:space="preserve"><tspan
120+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
121+ y="199.36218"
122+ x="247"
123+ id="tspan4187"
124+ sodipodi:role="line">Goal</tspan></text>
125+ <rect
126+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
127+ id="rect4189"
128+ width="39"
129+ height="32"
130+ x="134"
131+ y="205.3622"
132+ inkscape:export-xdpi="61.120499"
133+ inkscape:export-ydpi="61.120499" />
134+ <rect
135+ y="206.3622"
136+ x="182"
137+ height="32"
138+ width="200"
139+ id="rect4191"
140+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
141+ inkscape:export-xdpi="61.120499"
142+ inkscape:export-ydpi="61.120499" />
143+ <rect
144+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
145+ id="rect4195"
146+ width="95"
147+ height="32"
148+ x="494"
149+ y="206.3622"
150+ inkscape:export-xdpi="61.120499"
151+ inkscape:export-ydpi="61.120499" />
152+ <rect
153+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
154+ id="rect4197"
155+ width="95"
156+ height="32"
157+ x="389"
158+ y="237.3622"
159+ inkscape:export-xdpi="61.120499"
160+ inkscape:export-ydpi="61.120499" />
161+ <rect
162+ y="269.36218"
163+ x="389"
164+ height="32"
165+ width="95"
166+ id="rect4199"
167+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
168+ inkscape:export-xdpi="61.120499"
169+ inkscape:export-ydpi="61.120499" />
170+ <rect
171+ y="205.3622"
172+ x="389"
173+ height="32"
174+ width="95"
175+ id="rect4201"
176+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
177+ inkscape:export-xdpi="61.120499"
178+ inkscape:export-ydpi="61.120499" />
179+ <text
180+ inkscape:export-ydpi="61.120499"
181+ inkscape:export-xdpi="61.120499"
182+ xml:space="preserve"
183+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
184+ x="400"
185+ y="257.36218"
186+ id="text4276"
187+ sodipodi:linespacing="125%"><tspan
188+ id="tspan4280"
189+ sodipodi:role="line"
190+ x="400"
191+ y="257.36218"
192+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">hole_0</tspan></text>
193+ <text
194+ sodipodi:linespacing="125%"
195+ id="text4159"
196+ y="225.36218"
197+ x="141"
198+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
199+ xml:space="preserve"
200+ inkscape:export-xdpi="61.120499"
201+ inkscape:export-ydpi="61.120499"><tspan
202+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
203+ y="225.36218"
204+ x="141"
205+ sodipodi:role="line"
206+ id="tspan4161">[ ]</tspan></text>
207+ <text
208+ sodipodi:linespacing="125%"
209+ id="text4163"
210+ y="275.36218"
211+ x="135"
212+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
213+ xml:space="preserve"
214+ inkscape:export-xdpi="61.120499"
215+ inkscape:export-ydpi="61.120499"><tspan
216+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
217+ y="275.36218"
218+ x="135"
219+ sodipodi:role="line"
220+ id="tspan4165">starts off empty</tspan></text>
221+ <path
222+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
223+ d="m 154,237.3622 0,25"
224+ id="path4167"
225+ inkscape:connector-curvature="0"
226+ inkscape:export-xdpi="61.120499"
227+ inkscape:export-ydpi="61.120499"
228+ sodipodi:nodetypes="cc" />
229+ <text
230+ inkscape:export-ydpi="61.120499"
231+ inkscape:export-xdpi="61.120499"
232+ xml:space="preserve"
233+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
234+ x="188"
235+ y="227.36218"
236+ id="text4786"
237+ sodipodi:linespacing="125%"><tspan
238+ sodipodi:role="line"
239+ x="188"
240+ y="227.36218"
241+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
242+ id="tspan4790">(hole_2 , pi_arg : Nat-&gt;Nat)</tspan></text>
243+ <text
244+ inkscape:export-ydpi="61.120499"
245+ inkscape:export-xdpi="61.120499"
246+ xml:space="preserve"
247+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
248+ x="233.57927"
249+ y="309.21585"
250+ id="text4794"
251+ sodipodi:linespacing="125%"><tspan
252+ id="tspan4796"
253+ sodipodi:role="line"
254+ x="233.57927"
255+ y="309.21585"
256+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">this is the signature</tspan><tspan
257+ sodipodi:role="line"
258+ x="233.57927"
259+ y="327.96585"
260+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
261+ id="tspan4810">we are looking for</tspan></text>
262+ <path
263+ inkscape:connector-curvature="0"
264+ id="path4798"
265+ d="m 298,236.3622 -0.42683,58.52439"
266+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
267+ sodipodi:nodetypes="cc"
268+ inkscape:export-xdpi="61.120499"
269+ inkscape:export-ydpi="61.120499" />
270+ <text
271+ sodipodi:linespacing="125%"
272+ id="text4800"
273+ y="335.85608"
274+ x="383.54877"
275+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
276+ xml:space="preserve"
277+ inkscape:export-xdpi="61.120499"
278+ inkscape:export-ydpi="61.120499"><tspan
279+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
280+ y="335.85608"
281+ x="383.54877"
282+ sodipodi:role="line"
283+ id="tspan4802">machine chosen</tspan><tspan
284+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
285+ y="354.60608"
286+ x="383.54877"
287+ sodipodi:role="line"
288+ id="tspan4812">names for the holes</tspan></text>
289+ <path
290+ sodipodi:nodetypes="cc"
291+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
292+ d="m 432,265.3622 0.15244,56.82317"
293+ id="path4804"
294+ inkscape:connector-curvature="0"
295+ inkscape:export-xdpi="61.120499"
296+ inkscape:export-ydpi="61.120499" />
297+ <text
298+ inkscape:export-ydpi="61.120499"
299+ inkscape:export-xdpi="61.120499"
300+ xml:space="preserve"
301+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
302+ x="498"
303+ y="227.36218"
304+ id="text4806"
305+ sodipodi:linespacing="125%"><tspan
306+ id="tspan4808"
307+ sodipodi:role="line"
308+ x="498"
309+ y="227.36218"
310+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">no guess yet</tspan></text>
311+ </g>
312+</svg>
docs/image/elabProofStateEx1_2.pngnew file

Binary file not shown.

docs/image/elabProofStateEx1_2.svgnew file+281
@@ -0,0 +1,281 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="elabProofStateEx1_2.svg"
19+ inkscape:export-filename="/home/mjb/Idris-dev/docs/image/elabProofStateEx1_2.png"
20+ inkscape:export-xdpi="61.120499"
21+ inkscape:export-ydpi="61.120499">
22+ <defs
23+ id="defs4">
24+ <marker
25+ inkscape:stockid="Arrow1Mend"
26+ orient="auto"
27+ refY="0.0"
28+ refX="0.0"
29+ id="Arrow1Mend"
30+ style="overflow:visible;"
31+ inkscape:isstock="true">
32+ <path
33+ id="path4252"
34+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
35+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
36+ transform="scale(0.4) rotate(180) translate(10,0)" />
37+ </marker>
38+ </defs>
39+ <sodipodi:namedview
40+ id="base"
41+ pagecolor="#ffffff"
42+ bordercolor="#666666"
43+ borderopacity="1.0"
44+ inkscape:pageopacity="0.0"
45+ inkscape:pageshadow="2"
46+ inkscape:zoom="1"
47+ inkscape:cx="211.75967"
48+ inkscape:cy="688.76752"
49+ inkscape:document-units="px"
50+ inkscape:current-layer="layer1"
51+ showgrid="false"
52+ inkscape:window-width="1920"
53+ inkscape:window-height="1015"
54+ inkscape:window-x="0"
55+ inkscape:window-y="0"
56+ inkscape:window-maximized="1" />
57+ <metadata
58+ id="metadata7">
59+ <rdf:RDF>
60+ <cc:Work
61+ rdf:about="">
62+ <dc:format>image/svg+xml</dc:format>
63+ <dc:type
64+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
65+ <dc:title />
66+ </cc:Work>
67+ </rdf:RDF>
68+ </metadata>
69+ <g
70+ inkscape:label="Layer 1"
71+ inkscape:groupmode="layer"
72+ id="layer1">
73+ <text
74+ sodipodi:linespacing="125%"
75+ id="text4140"
76+ y="226.36218"
77+ x="401"
78+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
79+ xml:space="preserve"
80+ inkscape:export-xdpi="61.120499"
81+ inkscape:export-ydpi="61.120499"><tspan
82+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
83+ y="226.36218"
84+ x="401"
85+ sodipodi:role="line"
86+ id="tspan4144">hole_2</tspan></text>
87+ <text
88+ inkscape:export-ydpi="61.120499"
89+ inkscape:export-xdpi="61.120499"
90+ sodipodi:linespacing="125%"
91+ id="text4173"
92+ y="198.36218"
93+ x="135"
94+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
95+ xml:space="preserve"><tspan
96+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
97+ y="198.36218"
98+ x="135"
99+ id="tspan4175"
100+ sodipodi:role="line">Environment</tspan></text>
101+ <text
102+ xml:space="preserve"
103+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
104+ x="393"
105+ y="197.36218"
106+ id="text4177"
107+ sodipodi:linespacing="125%"
108+ inkscape:export-xdpi="61.120499"
109+ inkscape:export-ydpi="61.120499"><tspan
110+ sodipodi:role="line"
111+ id="tspan4179"
112+ x="393"
113+ y="197.36218"
114+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1">Holes</tspan></text>
115+ <text
116+ inkscape:export-ydpi="61.120499"
117+ inkscape:export-xdpi="61.120499"
118+ sodipodi:linespacing="125%"
119+ id="text4181"
120+ y="197.36218"
121+ x="503"
122+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
123+ xml:space="preserve"><tspan
124+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
125+ y="197.36218"
126+ x="503"
127+ id="tspan4183"
128+ sodipodi:role="line">Guess</tspan></text>
129+ <text
130+ inkscape:export-ydpi="61.120499"
131+ inkscape:export-xdpi="61.120499"
132+ sodipodi:linespacing="125%"
133+ id="text4185"
134+ y="199.36218"
135+ x="247"
136+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
137+ xml:space="preserve"><tspan
138+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
139+ y="199.36218"
140+ x="247"
141+ id="tspan4187"
142+ sodipodi:role="line">Goal</tspan></text>
143+ <rect
144+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
145+ id="rect4189"
146+ width="92"
147+ height="32"
148+ x="134"
149+ y="205.3622"
150+ inkscape:export-xdpi="61.120499"
151+ inkscape:export-ydpi="61.120499" />
152+ <rect
153+ y="206.3622"
154+ x="234"
155+ height="32"
156+ width="148"
157+ id="rect4191"
158+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
159+ inkscape:export-xdpi="61.120499"
160+ inkscape:export-ydpi="61.120499" />
161+ <rect
162+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
163+ id="rect4195"
164+ width="95"
165+ height="32"
166+ x="497"
167+ y="205.3622"
168+ inkscape:export-xdpi="61.120499"
169+ inkscape:export-ydpi="61.120499" />
170+ <rect
171+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
172+ id="rect4197"
173+ width="95"
174+ height="32"
175+ x="389"
176+ y="237.3622"
177+ inkscape:export-xdpi="61.120499"
178+ inkscape:export-ydpi="61.120499" />
179+ <rect
180+ y="269.36218"
181+ x="389"
182+ height="32"
183+ width="95"
184+ id="rect4199"
185+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
186+ inkscape:export-xdpi="61.120499"
187+ inkscape:export-ydpi="61.120499" />
188+ <rect
189+ y="205.3622"
190+ x="389"
191+ height="32"
192+ width="95"
193+ id="rect4201"
194+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
195+ inkscape:export-xdpi="61.120499"
196+ inkscape:export-ydpi="61.120499" />
197+ <text
198+ inkscape:export-ydpi="61.120499"
199+ inkscape:export-xdpi="61.120499"
200+ xml:space="preserve"
201+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
202+ x="400"
203+ y="257.36218"
204+ id="text4276"
205+ sodipodi:linespacing="125%"><tspan
206+ id="tspan4280"
207+ sodipodi:role="line"
208+ x="400"
209+ y="257.36218"
210+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">hole_0</tspan></text>
211+ <text
212+ sodipodi:linespacing="125%"
213+ id="text4159"
214+ y="225.36218"
215+ x="140"
216+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
217+ xml:space="preserve"
218+ inkscape:export-xdpi="61.120499"
219+ inkscape:export-ydpi="61.120499"><tspan
220+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
221+ y="225.36218"
222+ x="140"
223+ sodipodi:role="line"
224+ id="tspan4161">(x, λ Nat)</tspan></text>
225+ <text
226+ inkscape:export-ydpi="61.120499"
227+ inkscape:export-xdpi="61.120499"
228+ xml:space="preserve"
229+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
230+ x="266"
231+ y="226.36218"
232+ id="text4786"
233+ sodipodi:linespacing="125%"><tspan
234+ sodipodi:role="line"
235+ x="266"
236+ y="226.36218"
237+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
238+ id="tspan4790">(hole_2 , Nat)</tspan></text>
239+ <text
240+ sodipodi:linespacing="125%"
241+ id="text4800"
242+ y="290.36218"
243+ x="163"
244+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
245+ xml:space="preserve"
246+ inkscape:export-xdpi="61.120499"
247+ inkscape:export-ydpi="61.120499"><tspan
248+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
249+ y="290.36218"
250+ x="163"
251+ sodipodi:role="line"
252+ id="tspan4812">replace the focussed hole</tspan><tspan
253+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
254+ y="309.11218"
255+ x="163"
256+ sodipodi:role="line"
257+ id="tspan6225">with a lambda</tspan></text>
258+ <path
259+ sodipodi:nodetypes="cc"
260+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
261+ d="m 307,242.3622 c -5.24693,34.96318 -108.05981,45.71777 -126,0"
262+ id="path4804"
263+ inkscape:connector-curvature="0"
264+ inkscape:export-xdpi="61.120499"
265+ inkscape:export-ydpi="61.120499" />
266+ <text
267+ inkscape:export-ydpi="61.120499"
268+ inkscape:export-xdpi="61.120499"
269+ xml:space="preserve"
270+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
271+ x="510"
272+ y="226.36218"
273+ id="text4174"
274+ sodipodi:linespacing="125%"><tspan
275+ id="tspan4176"
276+ sodipodi:role="line"
277+ x="510"
278+ y="226.36218"
279+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">x:Nat</tspan></text>
280+ </g>
281+</svg>
docs/image/elabProofStateEx1_3.pngnew file

Binary file not shown.

docs/image/elabProofStateEx1_3.svgnew file+244
@@ -0,0 +1,244 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="elabProofStateEx1_3.svg"
19+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"
20+ inkscape:export-xdpi="61.120499"
21+ inkscape:export-ydpi="61.120499">
22+ <defs
23+ id="defs4" />
24+ <sodipodi:namedview
25+ id="base"
26+ pagecolor="#ffffff"
27+ bordercolor="#666666"
28+ borderopacity="1.0"
29+ inkscape:pageopacity="0.0"
30+ inkscape:pageshadow="2"
31+ inkscape:zoom="1"
32+ inkscape:cx="345.95856"
33+ inkscape:cy="688.76752"
34+ inkscape:document-units="px"
35+ inkscape:current-layer="layer1"
36+ showgrid="false"
37+ inkscape:window-width="1920"
38+ inkscape:window-height="1015"
39+ inkscape:window-x="0"
40+ inkscape:window-y="0"
41+ inkscape:window-maximized="1" />
42+ <metadata
43+ id="metadata7">
44+ <rdf:RDF>
45+ <cc:Work
46+ rdf:about="">
47+ <dc:format>image/svg+xml</dc:format>
48+ <dc:type
49+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50+ <dc:title />
51+ </cc:Work>
52+ </rdf:RDF>
53+ </metadata>
54+ <g
55+ inkscape:label="Layer 1"
56+ inkscape:groupmode="layer"
57+ id="layer1">
58+ <text
59+ sodipodi:linespacing="125%"
60+ id="text4140"
61+ y="226.36218"
62+ x="401"
63+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
64+ xml:space="preserve"
65+ inkscape:export-xdpi="61.120499"
66+ inkscape:export-ydpi="61.120499"
67+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
68+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
69+ y="226.36218"
70+ x="401"
71+ sodipodi:role="line"
72+ id="tspan4144">hole_2</tspan></text>
73+ <text
74+ inkscape:export-ydpi="61.120499"
75+ inkscape:export-xdpi="61.120499"
76+ sodipodi:linespacing="125%"
77+ id="text4173"
78+ y="198.36218"
79+ x="135"
80+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
81+ xml:space="preserve"
82+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
83+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
84+ y="198.36218"
85+ x="135"
86+ id="tspan4175"
87+ sodipodi:role="line">Environment</tspan></text>
88+ <text
89+ xml:space="preserve"
90+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
91+ x="393"
92+ y="197.36218"
93+ id="text4177"
94+ sodipodi:linespacing="125%"
95+ inkscape:export-xdpi="61.120499"
96+ inkscape:export-ydpi="61.120499"
97+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
98+ sodipodi:role="line"
99+ id="tspan4179"
100+ x="393"
101+ y="197.36218"
102+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1">Holes</tspan></text>
103+ <text
104+ inkscape:export-ydpi="61.120499"
105+ inkscape:export-xdpi="61.120499"
106+ sodipodi:linespacing="125%"
107+ id="text4181"
108+ y="197.36218"
109+ x="503"
110+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
111+ xml:space="preserve"
112+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
113+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
114+ y="197.36218"
115+ x="503"
116+ id="tspan4183"
117+ sodipodi:role="line">Guess</tspan></text>
118+ <text
119+ inkscape:export-ydpi="61.120499"
120+ inkscape:export-xdpi="61.120499"
121+ sodipodi:linespacing="125%"
122+ id="text4185"
123+ y="199.36218"
124+ x="247"
125+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
126+ xml:space="preserve"
127+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
128+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
129+ y="199.36218"
130+ x="247"
131+ id="tspan4187"
132+ sodipodi:role="line">Goal</tspan></text>
133+ <rect
134+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
135+ id="rect4189"
136+ width="92"
137+ height="32"
138+ x="134"
139+ y="205.3622"
140+ inkscape:export-xdpi="61.120499"
141+ inkscape:export-ydpi="61.120499"
142+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png" />
143+ <rect
144+ y="206.3622"
145+ x="234"
146+ height="32"
147+ width="148"
148+ id="rect4191"
149+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
150+ inkscape:export-xdpi="61.120499"
151+ inkscape:export-ydpi="61.120499"
152+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png" />
153+ <rect
154+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
155+ id="rect4195"
156+ width="95"
157+ height="32"
158+ x="497"
159+ y="205.3622"
160+ inkscape:export-xdpi="61.120499"
161+ inkscape:export-ydpi="61.120499"
162+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png" />
163+ <rect
164+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
165+ id="rect4197"
166+ width="95"
167+ height="32"
168+ x="389"
169+ y="237.3622"
170+ inkscape:export-xdpi="61.120499"
171+ inkscape:export-ydpi="61.120499"
172+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png" />
173+ <rect
174+ y="205.3622"
175+ x="389"
176+ height="32"
177+ width="95"
178+ id="rect4201"
179+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
180+ inkscape:export-xdpi="61.120499"
181+ inkscape:export-ydpi="61.120499"
182+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png" />
183+ <text
184+ inkscape:export-ydpi="61.120499"
185+ inkscape:export-xdpi="61.120499"
186+ xml:space="preserve"
187+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
188+ x="400"
189+ y="257.36218"
190+ id="text4276"
191+ sodipodi:linespacing="125%"
192+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
193+ id="tspan4280"
194+ sodipodi:role="line"
195+ x="400"
196+ y="257.36218"
197+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">hole_0</tspan></text>
198+ <text
199+ sodipodi:linespacing="125%"
200+ id="text4159"
201+ y="225.36218"
202+ x="140"
203+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
204+ xml:space="preserve"
205+ inkscape:export-xdpi="61.120499"
206+ inkscape:export-ydpi="61.120499"
207+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
208+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
209+ y="225.36218"
210+ x="140"
211+ sodipodi:role="line"
212+ id="tspan4161">(x, λ Nat)</tspan></text>
213+ <text
214+ inkscape:export-ydpi="61.120499"
215+ inkscape:export-xdpi="61.120499"
216+ xml:space="preserve"
217+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
218+ x="266"
219+ y="226.36218"
220+ id="text4786"
221+ sodipodi:linespacing="125%"
222+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
223+ sodipodi:role="line"
224+ x="266"
225+ y="226.36218"
226+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
227+ id="tspan4790">(hole_2 , Nat)</tspan></text>
228+ <text
229+ inkscape:export-ydpi="61.120499"
230+ inkscape:export-xdpi="61.120499"
231+ xml:space="preserve"
232+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
233+ x="510"
234+ y="226.36218"
235+ id="text4174"
236+ sodipodi:linespacing="125%"
237+ inkscape:export-filename="/home/master/euclid/prog/idris/elaborator/elabTactics/example1/elabProofStateEx1_3.png"><tspan
238+ id="tspan4176"
239+ sodipodi:role="line"
240+ x="510"
241+ y="226.36218"
242+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">x:Nat</tspan></text>
243+ </g>
244+</svg>
docs/image/fill.pngnew file

Binary file not shown.

docs/image/fill.svgnew file+163
@@ -0,0 +1,163 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 210 297"
15+ version="1.1"
16+ id="svg8"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="fill.svg">
19+ <defs
20+ id="defs2">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker838"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow1Mend">
29+ <path
30+ transform="scale(0.4) rotate(180) translate(10,0)"
31+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
32+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
33+ id="path836" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow1Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="Arrow1Mend"
41+ style="overflow:visible;"
42+ inkscape:isstock="true"
43+ inkscape:collect="always">
44+ <path
45+ id="path4529"
46+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
47+ style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
48+ transform="scale(0.4) rotate(180) translate(10,0)" />
49+ </marker>
50+ </defs>
51+ <sodipodi:namedview
52+ id="base"
53+ pagecolor="#ffffff"
54+ bordercolor="#666666"
55+ borderopacity="1.0"
56+ inkscape:pageopacity="0.0"
57+ inkscape:pageshadow="2"
58+ inkscape:zoom="1"
59+ inkscape:cx="313.5"
60+ inkscape:cy="696.5"
61+ inkscape:document-units="mm"
62+ inkscape:current-layer="layer1"
63+ showgrid="false"
64+ inkscape:window-width="1920"
65+ inkscape:window-height="1015"
66+ inkscape:window-x="0"
67+ inkscape:window-y="0"
68+ inkscape:window-maximized="1" />
69+ <metadata
70+ id="metadata5">
71+ <rdf:RDF>
72+ <cc:Work
73+ rdf:about="">
74+ <dc:format>image/svg+xml</dc:format>
75+ <dc:type
76+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
77+ <dc:title />
78+ </cc:Work>
79+ </rdf:RDF>
80+ </metadata>
81+ <g
82+ inkscape:label="Layer 1"
83+ inkscape:groupmode="layer"
84+ id="layer1">
85+ <rect
86+ style="fill:#ffff00;fill-opacity:1;stroke-width:0.26458332"
87+ id="rect22"
88+ width="31.75"
89+ height="5.5562501"
90+ x="70.114571"
91+ y="114.96667"
92+ inkscape:export-xdpi="61.120499"
93+ inkscape:export-ydpi="61.120499" />
94+ <text
95+ xml:space="preserve"
96+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
97+ x="65.352081"
98+ y="105.17709"
99+ id="text12"
100+ inkscape:export-xdpi="61.120499"
101+ inkscape:export-ydpi="61.120499"><tspan
102+ sodipodi:role="line"
103+ id="tspan10"
104+ x="65.352081"
105+ y="105.17709"
106+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332">? {hole} . {hole}</tspan></text>
107+ <text
108+ id="text16"
109+ y="118.67083"
110+ x="56.356247"
111+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
112+ xml:space="preserve"
113+ inkscape:export-xdpi="61.120499"
114+ inkscape:export-ydpi="61.120499"><tspan
115+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
116+ y="118.67083"
117+ x="56.356247"
118+ id="tspan14"
119+ sodipodi:role="line">?{hole} ≈ Prelude.Nat.Z . {hole}</tspan></text>
120+ <text
121+ id="text20"
122+ y="110.99791"
123+ x="82.814583"
124+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
125+ xml:space="preserve"
126+ inkscape:export-xdpi="61.120499"
127+ inkscape:export-ydpi="61.120499"><tspan
128+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
129+ y="110.99791"
130+ x="82.814583"
131+ id="tspan18"
132+ sodipodi:role="line">fill `(Z)</tspan></text>
133+ <path
134+ style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
135+ d="m 80.668481,106.30075 -0.0032,7.57492"
136+ id="path4518"
137+ inkscape:connector-curvature="0"
138+ sodipodi:nodetypes="cc"
139+ inkscape:export-xdpi="61.120499"
140+ inkscape:export-ydpi="61.120499" />
141+ <text
142+ inkscape:export-ydpi="61.120499"
143+ inkscape:export-xdpi="61.120499"
144+ xml:space="preserve"
145+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
146+ x="63.499996"
147+ y="93.006248"
148+ id="text832"><tspan
149+ sodipodi:role="line"
150+ id="tspan830"
151+ x="63.499996"
152+ y="93.006248"
153+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">focus</tspan></text>
154+ <path
155+ inkscape:export-ydpi="61.120499"
156+ inkscape:export-xdpi="61.120499"
157+ sodipodi:nodetypes="cc"
158+ inkscape:connector-curvature="0"
159+ id="path834"
160+ d="m 66.645564,94.659084 -0.0032,5.458256"
161+ style="fill:none;stroke:#0000ff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker838)" />
162+ </g>
163+</svg>
docs/image/generateDatatype.pngnew file

Binary file not shown.

docs/image/generateDatatype.svgnew file+540
@@ -0,0 +1,540 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="generateDatatype.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker7147"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow2Mend">
29+ <path
30+ transform="scale(0.6) rotate(180) translate(0,0)"
31+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
32+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
33+ id="path7149" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow2Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="marker6819"
41+ style="overflow:visible;"
42+ inkscape:isstock="true">
43+ <path
44+ id="path6821"
45+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
46+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
47+ transform="scale(0.6) rotate(180) translate(0,0)" />
48+ </marker>
49+ <marker
50+ inkscape:isstock="true"
51+ style="overflow:visible;"
52+ id="marker6325"
53+ refX="0.0"
54+ refY="0.0"
55+ orient="auto"
56+ inkscape:stockid="Arrow2Mend">
57+ <path
58+ transform="scale(0.6) rotate(180) translate(0,0)"
59+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
60+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
61+ id="path6327" />
62+ </marker>
63+ <marker
64+ inkscape:stockid="Arrow2Mend"
65+ orient="auto"
66+ refY="0.0"
67+ refX="0.0"
68+ id="marker5163"
69+ style="overflow:visible;"
70+ inkscape:isstock="true">
71+ <path
72+ id="path5165"
73+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
74+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
75+ transform="scale(0.6) rotate(180) translate(0,0)" />
76+ </marker>
77+ <marker
78+ inkscape:isstock="true"
79+ style="overflow:visible;"
80+ id="marker5133"
81+ refX="0.0"
82+ refY="0.0"
83+ orient="auto"
84+ inkscape:stockid="Arrow2Mend"
85+ inkscape:collect="always">
86+ <path
87+ transform="scale(0.6) rotate(180) translate(0,0)"
88+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
89+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
90+ id="path5135" />
91+ </marker>
92+ <marker
93+ inkscape:stockid="Arrow2Mend"
94+ orient="auto"
95+ refY="0.0"
96+ refX="0.0"
97+ id="Arrow2Mend"
98+ style="overflow:visible;"
99+ inkscape:isstock="true"
100+ inkscape:collect="always">
101+ <path
102+ id="path4183"
103+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
104+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
105+ transform="scale(0.6) rotate(180) translate(0,0)" />
106+ </marker>
107+ </defs>
108+ <sodipodi:namedview
109+ id="base"
110+ pagecolor="#ffffff"
111+ bordercolor="#666666"
112+ borderopacity="1.0"
113+ inkscape:pageopacity="0.0"
114+ inkscape:pageshadow="2"
115+ inkscape:zoom="1"
116+ inkscape:cx="380.92935"
117+ inkscape:cy="520"
118+ inkscape:document-units="px"
119+ inkscape:current-layer="layer1"
120+ showgrid="false"
121+ inkscape:window-width="1212"
122+ inkscape:window-height="1011"
123+ inkscape:window-x="-4"
124+ inkscape:window-y="0"
125+ inkscape:window-maximized="0" />
126+ <metadata
127+ id="metadata7">
128+ <rdf:RDF>
129+ <cc:Work
130+ rdf:about="">
131+ <dc:format>image/svg+xml</dc:format>
132+ <dc:type
133+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
134+ <dc:title></dc:title>
135+ </cc:Work>
136+ </rdf:RDF>
137+ </metadata>
138+ <g
139+ inkscape:label="Layer 1"
140+ inkscape:groupmode="layer"
141+ id="layer1">
142+ <rect
143+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
144+ id="rect4136"
145+ width="201"
146+ height="69"
147+ x="116"
148+ y="203.3622"
149+ inkscape:export-xdpi="61.120499"
150+ inkscape:export-ydpi="61.120499" />
151+ <rect
152+ y="322.36218"
153+ x="113"
154+ height="69"
155+ width="201"
156+ id="rect4138"
157+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
158+ inkscape:export-xdpi="61.120499"
159+ inkscape:export-ydpi="61.120499" />
160+ <rect
161+ y="202.3622"
162+ x="381"
163+ height="69"
164+ width="201"
165+ id="rect4140"
166+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
167+ inkscape:export-xdpi="61.120499"
168+ inkscape:export-ydpi="61.120499" />
169+ <text
170+ xml:space="preserve"
171+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
172+ x="125"
173+ y="227.3622"
174+ id="text4142"
175+ sodipodi:linespacing="125%"
176+ inkscape:export-xdpi="61.120499"
177+ inkscape:export-ydpi="61.120499"><tspan
178+ sodipodi:role="line"
179+ id="tspan4144"
180+ x="125"
181+ y="227.3622">declareDatatype</tspan></text>
182+ <text
183+ sodipodi:linespacing="125%"
184+ id="text4146"
185+ y="225.3622"
186+ x="389"
187+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
188+ xml:space="preserve"
189+ inkscape:export-xdpi="61.120499"
190+ inkscape:export-ydpi="61.120499"><tspan
191+ y="225.3622"
192+ x="389"
193+ id="tspan4148"
194+ sodipodi:role="line">defineDatatype</tspan></text>
195+ <path
196+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5133)"
197+ d="m 190,271.3622 0,48"
198+ id="path4150"
199+ inkscape:connector-curvature="0"
200+ inkscape:export-xdpi="61.120499"
201+ inkscape:export-ydpi="61.120499" />
202+ <text
203+ sodipodi:linespacing="125%"
204+ id="text5074"
205+ y="295.36218"
206+ x="201"
207+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
208+ xml:space="preserve"
209+ inkscape:export-xdpi="61.120499"
210+ inkscape:export-ydpi="61.120499"><tspan
211+ y="295.36218"
212+ x="201"
213+ sodipodi:role="line"
214+ id="tspan5080"
215+ style="font-size:15px;fill:#ff0000">Declare</tspan></text>
216+ <text
217+ xml:space="preserve"
218+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
219+ x="117"
220+ y="344.36218"
221+ id="text5082"
222+ sodipodi:linespacing="125%"
223+ inkscape:export-xdpi="61.120499"
224+ inkscape:export-ydpi="61.120499"><tspan
225+ style="font-size:15px;fill:#0000ff"
226+ sodipodi:role="line"
227+ id="tspan5084"
228+ x="117"
229+ y="344.36218">name:TTName</tspan><tspan
230+ style="font-size:15px;fill:#0000ff"
231+ id="tspan5086"
232+ sodipodi:role="line"
233+ x="117"
234+ y="363.11218">arguments:List FunArg</tspan><tspan
235+ style="font-size:15px;fill:#0000ff"
236+ id="tspan5088"
237+ sodipodi:role="line"
238+ x="117"
239+ y="381.86218">returnType:Raw</tspan></text>
240+ <text
241+ xml:space="preserve"
242+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
243+ x="111"
244+ y="313.36218"
245+ id="text5095"
246+ sodipodi:linespacing="125%"
247+ inkscape:export-xdpi="61.120499"
248+ inkscape:export-ydpi="61.120499"><tspan
249+ style="font-size:15px;fill:#0000ff;"
250+ id="tspan5097"
251+ sodipodi:role="line"
252+ x="111"
253+ y="313.36218">TyDecl</tspan></text>
254+ <rect
255+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
256+ id="rect5099"
257+ width="125"
258+ height="88"
259+ x="170"
260+ y="415.36218"
261+ inkscape:export-xdpi="61.120499"
262+ inkscape:export-ydpi="61.120499" />
263+ <path
264+ inkscape:connector-curvature="0"
265+ id="path5101"
266+ d="m 247,364.3622 0,48"
267+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
268+ inkscape:export-xdpi="61.120499"
269+ inkscape:export-ydpi="61.120499" />
270+ <text
271+ xml:space="preserve"
272+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
273+ x="260"
274+ y="408.36218"
275+ id="text5103"
276+ sodipodi:linespacing="125%"
277+ inkscape:export-xdpi="61.120499"
278+ inkscape:export-ydpi="61.120499"><tspan
279+ style="font-size:15px;fill:#ff0000"
280+ id="tspan5105"
281+ sodipodi:role="line"
282+ x="260"
283+ y="408.36218">MkFunArg</tspan></text>
284+ <text
285+ sodipodi:linespacing="125%"
286+ id="text5107"
287+ y="437.36218"
288+ x="174"
289+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
290+ xml:space="preserve"
291+ inkscape:export-xdpi="61.120499"
292+ inkscape:export-ydpi="61.120499"><tspan
293+ y="437.36218"
294+ x="174"
295+ id="tspan5109"
296+ sodipodi:role="line"
297+ style="font-size:15px;fill:#0000ff">name:TTName</tspan><tspan
298+ y="456.11218"
299+ x="174"
300+ sodipodi:role="line"
301+ id="tspan5113"
302+ style="font-size:15px;fill:#0000ff">type:Raw</tspan><tspan
303+ y="474.86218"
304+ x="174"
305+ sodipodi:role="line"
306+ style="font-size:15px;fill:#0000ff"
307+ id="tspan5121">plicity:Plicity</tspan><tspan
308+ y="493.61218"
309+ x="174"
310+ sodipodi:role="line"
311+ style="font-size:15px;fill:#0000ff"
312+ id="tspan5123">erasure:Erasure</tspan></text>
313+ <text
314+ sodipodi:linespacing="125%"
315+ id="text5115"
316+ y="409.36218"
317+ x="170"
318+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
319+ xml:space="preserve"
320+ inkscape:export-xdpi="61.120499"
321+ inkscape:export-ydpi="61.120499"><tspan
322+ y="409.36218"
323+ x="170"
324+ sodipodi:role="line"
325+ id="tspan5117"
326+ style="font-size:15px;fill:#0000ff">FunArg</tspan></text>
327+ <text
328+ sodipodi:linespacing="125%"
329+ id="text5125"
330+ y="526.36218"
331+ x="105"
332+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
333+ xml:space="preserve"
334+ inkscape:export-xdpi="61.120499"
335+ inkscape:export-ydpi="61.120499"><tspan
336+ y="526.36218"
337+ x="105"
338+ sodipodi:role="line"
339+ id="tspan5127"
340+ style="font-size:15px;fill:#ff0000">Explicit</tspan><tspan
341+ y="545.11218"
342+ x="105"
343+ sodipodi:role="line"
344+ style="font-size:15px;fill:#ff0000"
345+ id="tspan5129">Implicit</tspan><tspan
346+ y="563.86218"
347+ x="105"
348+ sodipodi:role="line"
349+ style="font-size:15px;fill:#ff0000"
350+ id="tspan5131">Constraint</tspan></text>
351+ <path
352+ inkscape:connector-curvature="0"
353+ id="path5161"
354+ d="m 169,473.3622 c -30.23945,2.9603 -39.98191,17.10078 -41,36"
355+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5163)"
356+ sodipodi:nodetypes="cc"
357+ inkscape:export-xdpi="61.120499"
358+ inkscape:export-ydpi="61.120499" />
359+ <path
360+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6325)"
361+ d="m 245,499.3622 0,28"
362+ id="path6319"
363+ inkscape:connector-curvature="0"
364+ sodipodi:nodetypes="cc"
365+ inkscape:export-xdpi="61.120499"
366+ inkscape:export-ydpi="61.120499" />
367+ <text
368+ sodipodi:linespacing="125%"
369+ id="text6321"
370+ y="544.36218"
371+ x="221"
372+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
373+ xml:space="preserve"
374+ inkscape:export-xdpi="61.120499"
375+ inkscape:export-ydpi="61.120499"><tspan
376+ y="544.36218"
377+ x="221"
378+ sodipodi:role="line"
379+ id="tspan6323"
380+ style="font-size:15px;fill:#ff0000">Erased</tspan><tspan
381+ y="563.11218"
382+ x="221"
383+ sodipodi:role="line"
384+ style="font-size:15px;fill:#ff0000"
385+ id="tspan6773">NotErased</tspan></text>
386+ <rect
387+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
388+ id="rect6775"
389+ width="247"
390+ height="49"
391+ x="347"
392+ y="322.36218"
393+ inkscape:export-xdpi="61.120499"
394+ inkscape:export-ydpi="61.120499" />
395+ <path
396+ inkscape:connector-curvature="0"
397+ id="path6777"
398+ d="m 458,271.3622 0,48"
399+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5133)"
400+ inkscape:export-xdpi="61.120499"
401+ inkscape:export-ydpi="61.120499" />
402+ <text
403+ xml:space="preserve"
404+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
405+ x="469"
406+ y="295.36218"
407+ id="text6779"
408+ sodipodi:linespacing="125%"
409+ inkscape:export-xdpi="61.120499"
410+ inkscape:export-ydpi="61.120499"><tspan
411+ style="font-size:15px;fill:#ff0000"
412+ id="tspan6781"
413+ sodipodi:role="line"
414+ x="469"
415+ y="295.36218">DefineDatatype</tspan></text>
416+ <text
417+ sodipodi:linespacing="125%"
418+ id="text6783"
419+ y="344.36218"
420+ x="351"
421+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
422+ xml:space="preserve"
423+ inkscape:export-xdpi="61.120499"
424+ inkscape:export-ydpi="61.120499"><tspan
425+ y="344.36218"
426+ x="351"
427+ sodipodi:role="line"
428+ id="tspan6789"
429+ style="font-size:15px;fill:#0000ff">name:TTName</tspan><tspan
430+ y="363.11218"
431+ x="351"
432+ sodipodi:role="line"
433+ style="font-size:15px;fill:#0000ff"
434+ id="tspan7130">constructors : List ConstructorDefn</tspan></text>
435+ <text
436+ sodipodi:linespacing="125%"
437+ id="text6791"
438+ y="313.36218"
439+ x="379"
440+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
441+ xml:space="preserve"
442+ inkscape:export-xdpi="61.120499"
443+ inkscape:export-ydpi="61.120499"><tspan
444+ y="313.36218"
445+ x="379"
446+ sodipodi:role="line"
447+ id="tspan6793"
448+ style="font-size:15px;fill:#0000ff">DataDefn</tspan></text>
449+ <rect
450+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
451+ id="rect6799"
452+ width="201"
453+ height="69"
454+ x="380"
455+ y="418.36218"
456+ inkscape:export-xdpi="61.120499"
457+ inkscape:export-ydpi="61.120499" />
458+ <path
459+ inkscape:connector-curvature="0"
460+ id="path6801"
461+ d="m 539,367.3622 0,48"
462+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6819)"
463+ inkscape:export-xdpi="61.120499"
464+ inkscape:export-ydpi="61.120499" />
465+ <text
466+ xml:space="preserve"
467+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
468+ x="450"
469+ y="386.36218"
470+ id="text6803"
471+ sodipodi:linespacing="125%"
472+ inkscape:export-xdpi="61.120499"
473+ inkscape:export-ydpi="61.120499"><tspan
474+ style="font-size:15px;fill:#ff0000"
475+ id="tspan6805"
476+ sodipodi:role="line"
477+ x="450"
478+ y="386.36218">Constructor</tspan></text>
479+ <text
480+ sodipodi:linespacing="125%"
481+ id="text6807"
482+ y="440.36218"
483+ x="384"
484+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
485+ xml:space="preserve"
486+ inkscape:export-xdpi="61.120499"
487+ inkscape:export-ydpi="61.120499"><tspan
488+ y="440.36218"
489+ x="384"
490+ id="tspan6809"
491+ sodipodi:role="line"
492+ style="font-size:15px;fill:#0000ff">name:TTName</tspan><tspan
493+ y="459.11218"
494+ x="384"
495+ sodipodi:role="line"
496+ id="tspan6811"
497+ style="font-size:15px;fill:#0000ff">arguments:List FunArg</tspan><tspan
498+ y="477.86218"
499+ x="384"
500+ sodipodi:role="line"
501+ id="tspan6813"
502+ style="font-size:15px;fill:#0000ff">returnType:Raw</tspan></text>
503+ <text
504+ sodipodi:linespacing="125%"
505+ id="text6815"
506+ y="409.36218"
507+ x="378"
508+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
509+ xml:space="preserve"
510+ inkscape:export-xdpi="61.120499"
511+ inkscape:export-ydpi="61.120499"><tspan
512+ y="409.36218"
513+ x="378"
514+ sodipodi:role="line"
515+ id="tspan6817"
516+ style="font-size:15px;fill:#0000ff">ConstructorDefn</tspan></text>
517+ <text
518+ inkscape:export-ydpi="61.120499"
519+ inkscape:export-xdpi="61.120499"
520+ sodipodi:linespacing="125%"
521+ id="text7135"
522+ y="425.36218"
523+ x="307"
524+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
525+ xml:space="preserve"><tspan
526+ y="425.36218"
527+ x="307"
528+ sodipodi:role="line"
529+ id="tspan7137"
530+ style="font-size:15px;fill:#ff0000">MkFunArg</tspan></text>
531+ <path
532+ inkscape:export-ydpi="61.120499"
533+ inkscape:export-xdpi="61.120499"
534+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7147)"
535+ d="m 379,458.3622 -80,-35"
536+ id="path7145"
537+ inkscape:connector-curvature="0"
538+ sodipodi:nodetypes="cc" />
539+ </g>
540+</svg>
docs/image/generateFunction.pngnew file

Binary file not shown.

docs/image/generateFunction.svgnew file+588
@@ -0,0 +1,588 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="generateFunction.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker4348"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow2Mend">
29+ <path
30+ transform="scale(0.6) rotate(180) translate(0,0)"
31+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
32+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
33+ id="path4350" />
34+ </marker>
35+ <marker
36+ inkscape:isstock="true"
37+ style="overflow:visible;"
38+ id="marker7147"
39+ refX="0.0"
40+ refY="0.0"
41+ orient="auto"
42+ inkscape:stockid="Arrow2Mend">
43+ <path
44+ transform="scale(0.6) rotate(180) translate(0,0)"
45+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
46+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
47+ id="path7149" />
48+ </marker>
49+ <marker
50+ inkscape:stockid="Arrow2Mend"
51+ orient="auto"
52+ refY="0.0"
53+ refX="0.0"
54+ id="marker6819"
55+ style="overflow:visible;"
56+ inkscape:isstock="true"
57+ inkscape:collect="always">
58+ <path
59+ id="path6821"
60+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
61+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
62+ transform="scale(0.6) rotate(180) translate(0,0)" />
63+ </marker>
64+ <marker
65+ inkscape:isstock="true"
66+ style="overflow:visible;"
67+ id="marker6325"
68+ refX="0.0"
69+ refY="0.0"
70+ orient="auto"
71+ inkscape:stockid="Arrow2Mend">
72+ <path
73+ transform="scale(0.6) rotate(180) translate(0,0)"
74+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
75+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
76+ id="path6327" />
77+ </marker>
78+ <marker
79+ inkscape:stockid="Arrow2Mend"
80+ orient="auto"
81+ refY="0.0"
82+ refX="0.0"
83+ id="marker5163"
84+ style="overflow:visible;"
85+ inkscape:isstock="true">
86+ <path
87+ id="path5165"
88+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
89+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
90+ transform="scale(0.6) rotate(180) translate(0,0)" />
91+ </marker>
92+ <marker
93+ inkscape:isstock="true"
94+ style="overflow:visible;"
95+ id="marker5133"
96+ refX="0.0"
97+ refY="0.0"
98+ orient="auto"
99+ inkscape:stockid="Arrow2Mend"
100+ inkscape:collect="always">
101+ <path
102+ transform="scale(0.6) rotate(180) translate(0,0)"
103+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
104+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
105+ id="path5135" />
106+ </marker>
107+ <marker
108+ inkscape:stockid="Arrow2Mend"
109+ orient="auto"
110+ refY="0.0"
111+ refX="0.0"
112+ id="Arrow2Mend"
113+ style="overflow:visible;"
114+ inkscape:isstock="true"
115+ inkscape:collect="always">
116+ <path
117+ id="path4183"
118+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
119+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
120+ transform="scale(0.6) rotate(180) translate(0,0)" />
121+ </marker>
122+ </defs>
123+ <sodipodi:namedview
124+ id="base"
125+ pagecolor="#ffffff"
126+ bordercolor="#666666"
127+ borderopacity="1.0"
128+ inkscape:pageopacity="0.0"
129+ inkscape:pageshadow="2"
130+ inkscape:zoom="1"
131+ inkscape:cx="380.92935"
132+ inkscape:cy="520"
133+ inkscape:document-units="px"
134+ inkscape:current-layer="layer1"
135+ showgrid="false"
136+ inkscape:window-width="1212"
137+ inkscape:window-height="1011"
138+ inkscape:window-x="0"
139+ inkscape:window-y="0"
140+ inkscape:window-maximized="0" />
141+ <metadata
142+ id="metadata7">
143+ <rdf:RDF>
144+ <cc:Work
145+ rdf:about="">
146+ <dc:format>image/svg+xml</dc:format>
147+ <dc:type
148+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
149+ <dc:title />
150+ </cc:Work>
151+ </rdf:RDF>
152+ </metadata>
153+ <g
154+ inkscape:label="Layer 1"
155+ inkscape:groupmode="layer"
156+ id="layer1">
157+ <rect
158+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
159+ id="rect4136"
160+ width="201"
161+ height="69"
162+ x="116"
163+ y="203.3622"
164+ inkscape:export-xdpi="61.120499"
165+ inkscape:export-ydpi="61.120499" />
166+ <rect
167+ y="322.36218"
168+ x="113"
169+ height="69"
170+ width="201"
171+ id="rect4138"
172+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
173+ inkscape:export-xdpi="61.120499"
174+ inkscape:export-ydpi="61.120499" />
175+ <rect
176+ y="202.3622"
177+ x="381"
178+ height="69"
179+ width="201"
180+ id="rect4140"
181+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
182+ inkscape:export-xdpi="61.120499"
183+ inkscape:export-ydpi="61.120499" />
184+ <text
185+ xml:space="preserve"
186+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
187+ x="125"
188+ y="227.3622"
189+ id="text4142"
190+ sodipodi:linespacing="125%"
191+ inkscape:export-xdpi="61.120499"
192+ inkscape:export-ydpi="61.120499"><tspan
193+ sodipodi:role="line"
194+ id="tspan4144"
195+ x="125"
196+ y="227.3622">declareType</tspan></text>
197+ <text
198+ sodipodi:linespacing="125%"
199+ id="text4146"
200+ y="225.3622"
201+ x="389"
202+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
203+ xml:space="preserve"
204+ inkscape:export-xdpi="61.120499"
205+ inkscape:export-ydpi="61.120499"><tspan
206+ y="225.3622"
207+ x="389"
208+ id="tspan4148"
209+ sodipodi:role="line">defineFunction</tspan></text>
210+ <path
211+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5133)"
212+ d="m 190,271.3622 0,48"
213+ id="path4150"
214+ inkscape:connector-curvature="0"
215+ inkscape:export-xdpi="61.120499"
216+ inkscape:export-ydpi="61.120499" />
217+ <text
218+ sodipodi:linespacing="125%"
219+ id="text5074"
220+ y="295.36218"
221+ x="201"
222+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
223+ xml:space="preserve"
224+ inkscape:export-xdpi="61.120499"
225+ inkscape:export-ydpi="61.120499"><tspan
226+ y="295.36218"
227+ x="201"
228+ sodipodi:role="line"
229+ id="tspan5080"
230+ style="font-size:15px;fill:#ff0000">Declare</tspan></text>
231+ <text
232+ xml:space="preserve"
233+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
234+ x="117"
235+ y="344.36218"
236+ id="text5082"
237+ sodipodi:linespacing="125%"
238+ inkscape:export-xdpi="61.120499"
239+ inkscape:export-ydpi="61.120499"><tspan
240+ style="font-size:15px;fill:#0000ff"
241+ sodipodi:role="line"
242+ id="tspan5084"
243+ x="117"
244+ y="344.36218">name:TTName</tspan><tspan
245+ style="font-size:15px;fill:#0000ff"
246+ id="tspan5086"
247+ sodipodi:role="line"
248+ x="117"
249+ y="363.11218">arguments:List FunArg</tspan><tspan
250+ style="font-size:15px;fill:#0000ff"
251+ id="tspan5088"
252+ sodipodi:role="line"
253+ x="117"
254+ y="381.86218">returnType:Raw</tspan></text>
255+ <text
256+ xml:space="preserve"
257+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
258+ x="111"
259+ y="313.36218"
260+ id="text5095"
261+ sodipodi:linespacing="125%"
262+ inkscape:export-xdpi="61.120499"
263+ inkscape:export-ydpi="61.120499"><tspan
264+ style="font-size:15px;fill:#0000ff;"
265+ id="tspan5097"
266+ sodipodi:role="line"
267+ x="111"
268+ y="313.36218">TyDecl</tspan></text>
269+ <rect
270+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
271+ id="rect5099"
272+ width="125"
273+ height="88"
274+ x="170"
275+ y="415.36218"
276+ inkscape:export-xdpi="61.120499"
277+ inkscape:export-ydpi="61.120499" />
278+ <path
279+ inkscape:connector-curvature="0"
280+ id="path5101"
281+ d="m 247,364.3622 0,48"
282+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
283+ inkscape:export-xdpi="61.120499"
284+ inkscape:export-ydpi="61.120499" />
285+ <text
286+ xml:space="preserve"
287+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
288+ x="260"
289+ y="408.36218"
290+ id="text5103"
291+ sodipodi:linespacing="125%"
292+ inkscape:export-xdpi="61.120499"
293+ inkscape:export-ydpi="61.120499"><tspan
294+ style="font-size:15px;fill:#ff0000"
295+ id="tspan5105"
296+ sodipodi:role="line"
297+ x="260"
298+ y="408.36218">MkFunArg</tspan></text>
299+ <text
300+ sodipodi:linespacing="125%"
301+ id="text5107"
302+ y="437.36218"
303+ x="174"
304+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
305+ xml:space="preserve"
306+ inkscape:export-xdpi="61.120499"
307+ inkscape:export-ydpi="61.120499"><tspan
308+ y="437.36218"
309+ x="174"
310+ id="tspan5109"
311+ sodipodi:role="line"
312+ style="font-size:15px;fill:#0000ff">name:TTName</tspan><tspan
313+ y="456.11218"
314+ x="174"
315+ sodipodi:role="line"
316+ id="tspan5113"
317+ style="font-size:15px;fill:#0000ff">type:Raw</tspan><tspan
318+ y="474.86218"
319+ x="174"
320+ sodipodi:role="line"
321+ style="font-size:15px;fill:#0000ff"
322+ id="tspan5121">plicity:Plicity</tspan><tspan
323+ y="493.61218"
324+ x="174"
325+ sodipodi:role="line"
326+ style="font-size:15px;fill:#0000ff"
327+ id="tspan5123">erasure:Erasure</tspan></text>
328+ <text
329+ sodipodi:linespacing="125%"
330+ id="text5115"
331+ y="409.36218"
332+ x="170"
333+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
334+ xml:space="preserve"
335+ inkscape:export-xdpi="61.120499"
336+ inkscape:export-ydpi="61.120499"><tspan
337+ y="409.36218"
338+ x="170"
339+ sodipodi:role="line"
340+ id="tspan5117"
341+ style="font-size:15px;fill:#0000ff">FunArg</tspan></text>
342+ <text
343+ sodipodi:linespacing="125%"
344+ id="text5125"
345+ y="526.36218"
346+ x="105"
347+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
348+ xml:space="preserve"
349+ inkscape:export-xdpi="61.120499"
350+ inkscape:export-ydpi="61.120499"><tspan
351+ y="526.36218"
352+ x="105"
353+ sodipodi:role="line"
354+ id="tspan5127"
355+ style="font-size:15px;fill:#ff0000">Explicit</tspan><tspan
356+ y="545.11218"
357+ x="105"
358+ sodipodi:role="line"
359+ style="font-size:15px;fill:#ff0000"
360+ id="tspan5129">Implicit</tspan><tspan
361+ y="563.86218"
362+ x="105"
363+ sodipodi:role="line"
364+ style="font-size:15px;fill:#ff0000"
365+ id="tspan5131">Constraint</tspan></text>
366+ <path
367+ inkscape:connector-curvature="0"
368+ id="path5161"
369+ d="m 169,473.3622 c -30.23945,2.9603 -39.98191,17.10078 -41,36"
370+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5163)"
371+ sodipodi:nodetypes="cc"
372+ inkscape:export-xdpi="61.120499"
373+ inkscape:export-ydpi="61.120499" />
374+ <path
375+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6325)"
376+ d="m 245,499.3622 0,28"
377+ id="path6319"
378+ inkscape:connector-curvature="0"
379+ sodipodi:nodetypes="cc"
380+ inkscape:export-xdpi="61.120499"
381+ inkscape:export-ydpi="61.120499" />
382+ <text
383+ sodipodi:linespacing="125%"
384+ id="text6321"
385+ y="544.36218"
386+ x="221"
387+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
388+ xml:space="preserve"
389+ inkscape:export-xdpi="61.120499"
390+ inkscape:export-ydpi="61.120499"><tspan
391+ y="544.36218"
392+ x="221"
393+ sodipodi:role="line"
394+ id="tspan6323"
395+ style="font-size:15px;fill:#ff0000">Erased</tspan><tspan
396+ y="563.11218"
397+ x="221"
398+ sodipodi:role="line"
399+ style="font-size:15px;fill:#ff0000"
400+ id="tspan6773">NotErased</tspan></text>
401+ <rect
402+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
403+ id="rect6775"
404+ width="247"
405+ height="49"
406+ x="347"
407+ y="322.36218"
408+ inkscape:export-xdpi="61.120499"
409+ inkscape:export-ydpi="61.120499" />
410+ <path
411+ inkscape:connector-curvature="0"
412+ id="path6777"
413+ d="m 458,271.3622 0,48"
414+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5133)"
415+ inkscape:export-xdpi="61.120499"
416+ inkscape:export-ydpi="61.120499" />
417+ <text
418+ xml:space="preserve"
419+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
420+ x="469"
421+ y="295.36218"
422+ id="text6779"
423+ sodipodi:linespacing="125%"
424+ inkscape:export-xdpi="61.120499"
425+ inkscape:export-ydpi="61.120499"><tspan
426+ style="font-size:15px;fill:#ff0000"
427+ id="tspan6781"
428+ sodipodi:role="line"
429+ x="469"
430+ y="295.36218">DefineFun</tspan></text>
431+ <text
432+ sodipodi:linespacing="125%"
433+ id="text6783"
434+ y="344.36218"
435+ x="351"
436+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
437+ xml:space="preserve"
438+ inkscape:export-xdpi="61.120499"
439+ inkscape:export-ydpi="61.120499"><tspan
440+ y="344.36218"
441+ x="351"
442+ sodipodi:role="line"
443+ id="tspan6789"
444+ style="font-size:15px;fill:#0000ff">name:TTName</tspan><tspan
445+ y="363.11218"
446+ x="351"
447+ sodipodi:role="line"
448+ style="font-size:15px;fill:#0000ff"
449+ id="tspan7130">clauses : List (FunClause a)</tspan></text>
450+ <text
451+ sodipodi:linespacing="125%"
452+ id="text6791"
453+ y="313.36218"
454+ x="379"
455+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
456+ xml:space="preserve"
457+ inkscape:export-xdpi="61.120499"
458+ inkscape:export-ydpi="61.120499"><tspan
459+ y="313.36218"
460+ x="379"
461+ sodipodi:role="line"
462+ id="tspan6793"
463+ style="font-size:15px;fill:#0000ff">FunDefn</tspan></text>
464+ <rect
465+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
466+ id="rect6799"
467+ width="86"
468+ height="64"
469+ x="372"
470+ y="462.36218"
471+ inkscape:export-xdpi="61.120499"
472+ inkscape:export-ydpi="61.120499" />
473+ <path
474+ inkscape:connector-curvature="0"
475+ id="path6801"
476+ d="m 552,370.3622 0,86"
477+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6819)"
478+ inkscape:export-xdpi="61.120499"
479+ inkscape:export-ydpi="61.120499"
480+ sodipodi:nodetypes="cc" />
481+ <text
482+ xml:space="preserve"
483+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
484+ x="352"
485+ y="418.36218"
486+ id="text6803"
487+ sodipodi:linespacing="125%"
488+ inkscape:export-xdpi="61.120499"
489+ inkscape:export-ydpi="61.120499"><tspan
490+ style="font-size:15px;fill:#ff0000"
491+ id="tspan6805"
492+ sodipodi:role="line"
493+ x="352"
494+ y="418.36218">MkFunClause</tspan></text>
495+ <text
496+ sodipodi:linespacing="125%"
497+ id="text6807"
498+ y="484.36218"
499+ x="376"
500+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
501+ xml:space="preserve"
502+ inkscape:export-xdpi="61.120499"
503+ inkscape:export-ydpi="61.120499"><tspan
504+ y="484.36218"
505+ x="376"
506+ sodipodi:role="line"
507+ id="tspan6813"
508+ style="font-size:15px;fill:#0000ff">lhs:a</tspan><tspan
509+ y="503.11218"
510+ x="376"
511+ sodipodi:role="line"
512+ style="font-size:15px;fill:#0000ff"
513+ id="tspan4330">rhs:a</tspan></text>
514+ <text
515+ sodipodi:linespacing="125%"
516+ id="text6815"
517+ y="453.36218"
518+ x="370"
519+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
520+ xml:space="preserve"
521+ inkscape:export-xdpi="61.120499"
522+ inkscape:export-ydpi="61.120499"><tspan
523+ y="453.36218"
524+ x="370"
525+ sodipodi:role="line"
526+ id="tspan6817"
527+ style="font-size:15px;fill:#0000ff">FunClause</tspan></text>
528+ <text
529+ inkscape:export-ydpi="61.120499"
530+ inkscape:export-xdpi="61.120499"
531+ sodipodi:linespacing="125%"
532+ id="text4321"
533+ y="395.36218"
534+ x="407"
535+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
536+ xml:space="preserve"><tspan
537+ y="395.36218"
538+ x="407"
539+ sodipodi:role="line"
540+ id="tspan4323"
541+ style="font-size:15px;fill:#ff0000">MkImpossibleClause</tspan></text>
542+ <rect
543+ inkscape:export-ydpi="61.120499"
544+ inkscape:export-xdpi="61.120499"
545+ y="461.36218"
546+ x="473"
547+ height="64"
548+ width="86"
549+ id="rect4332"
550+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
551+ <text
552+ inkscape:export-ydpi="61.120499"
553+ inkscape:export-xdpi="61.120499"
554+ xml:space="preserve"
555+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
556+ x="477"
557+ y="483.36218"
558+ id="text4334"
559+ sodipodi:linespacing="125%"><tspan
560+ id="tspan4338"
561+ style="font-size:15px;fill:#0000ff"
562+ sodipodi:role="line"
563+ x="477"
564+ y="483.36218">lhs:a</tspan></text>
565+ <text
566+ inkscape:export-ydpi="61.120499"
567+ inkscape:export-xdpi="61.120499"
568+ xml:space="preserve"
569+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
570+ x="471"
571+ y="452.36218"
572+ id="text4340"
573+ sodipodi:linespacing="125%"><tspan
574+ style="font-size:15px;fill:#0000ff"
575+ id="tspan4342"
576+ sodipodi:role="line"
577+ x="471"
578+ y="452.36218">FunClause</tspan></text>
579+ <path
580+ inkscape:export-ydpi="61.120499"
581+ inkscape:export-xdpi="61.120499"
582+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4348)"
583+ d="m 450,371.3622 0,84"
584+ id="path4346"
585+ inkscape:connector-curvature="0"
586+ sodipodi:nodetypes="cc" />
587+ </g>
588+</svg>
docs/image/generateFunction2.pngnew file

Binary file not shown.

docs/image/generateFunction2.svgnew file+430
@@ -0,0 +1,430 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="generateFunction2.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker4439"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow2Mend">
29+ <path
30+ transform="scale(0.6) rotate(180) translate(0,0)"
31+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
32+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
33+ id="path4441" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow2Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="marker4433"
41+ style="overflow:visible;"
42+ inkscape:isstock="true">
43+ <path
44+ id="path4435"
45+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
46+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
47+ transform="scale(0.6) rotate(180) translate(0,0)" />
48+ </marker>
49+ <marker
50+ inkscape:isstock="true"
51+ style="overflow:visible;"
52+ id="marker4427"
53+ refX="0.0"
54+ refY="0.0"
55+ orient="auto"
56+ inkscape:stockid="Arrow2Mend"
57+ inkscape:collect="always">
58+ <path
59+ transform="scale(0.6) rotate(180) translate(0,0)"
60+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
61+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
62+ id="path4429" />
63+ </marker>
64+ <marker
65+ inkscape:isstock="true"
66+ style="overflow:visible;"
67+ id="marker4411"
68+ refX="0.0"
69+ refY="0.0"
70+ orient="auto"
71+ inkscape:stockid="Arrow2Mend">
72+ <path
73+ transform="scale(0.6) rotate(180) translate(0,0)"
74+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
75+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
76+ id="path4413" />
77+ </marker>
78+ <marker
79+ inkscape:stockid="Arrow2Mend"
80+ orient="auto"
81+ refY="0.0"
82+ refX="0.0"
83+ id="marker4407"
84+ style="overflow:visible;"
85+ inkscape:isstock="true">
86+ <path
87+ id="path4409"
88+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
89+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
90+ transform="scale(0.6) rotate(180) translate(0,0)" />
91+ </marker>
92+ <marker
93+ inkscape:stockid="Arrow2Mend"
94+ orient="auto"
95+ refY="0.0"
96+ refX="0.0"
97+ id="marker4403"
98+ style="overflow:visible;"
99+ inkscape:isstock="true">
100+ <path
101+ id="path4405"
102+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
103+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
104+ transform="scale(0.6) rotate(180) translate(0,0)" />
105+ </marker>
106+ <marker
107+ inkscape:isstock="true"
108+ style="overflow:visible;"
109+ id="marker4359"
110+ refX="0.0"
111+ refY="0.0"
112+ orient="auto"
113+ inkscape:stockid="Arrow2Mend"
114+ inkscape:collect="always">
115+ <path
116+ transform="scale(0.6) rotate(180) translate(0,0)"
117+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
118+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
119+ id="path4361" />
120+ </marker>
121+ <marker
122+ inkscape:stockid="Arrow2Mend"
123+ orient="auto"
124+ refY="0.0"
125+ refX="0.0"
126+ id="marker4349"
127+ style="overflow:visible;"
128+ inkscape:isstock="true"
129+ inkscape:collect="always">
130+ <path
131+ id="path4351"
132+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
133+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
134+ transform="scale(0.6) rotate(180) translate(0,0)" />
135+ </marker>
136+ <marker
137+ inkscape:isstock="true"
138+ style="overflow:visible;"
139+ id="marker7147"
140+ refX="0.0"
141+ refY="0.0"
142+ orient="auto"
143+ inkscape:stockid="Arrow2Mend">
144+ <path
145+ transform="scale(0.6) rotate(180) translate(0,0)"
146+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
147+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
148+ id="path7149" />
149+ </marker>
150+ <marker
151+ inkscape:isstock="true"
152+ style="overflow:visible;"
153+ id="marker6325"
154+ refX="0.0"
155+ refY="0.0"
156+ orient="auto"
157+ inkscape:stockid="Arrow2Mend">
158+ <path
159+ transform="scale(0.6) rotate(180) translate(0,0)"
160+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
161+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
162+ id="path6327" />
163+ </marker>
164+ <marker
165+ inkscape:stockid="Arrow2Mend"
166+ orient="auto"
167+ refY="0.0"
168+ refX="0.0"
169+ id="marker5163"
170+ style="overflow:visible;"
171+ inkscape:isstock="true">
172+ <path
173+ id="path5165"
174+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#ff0000;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
175+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
176+ transform="scale(0.6) rotate(180) translate(0,0)" />
177+ </marker>
178+ </defs>
179+ <sodipodi:namedview
180+ id="base"
181+ pagecolor="#ffffff"
182+ bordercolor="#666666"
183+ borderopacity="1.0"
184+ inkscape:pageopacity="0.0"
185+ inkscape:pageshadow="2"
186+ inkscape:zoom="1"
187+ inkscape:cx="380.92935"
188+ inkscape:cy="592.42473"
189+ inkscape:document-units="px"
190+ inkscape:current-layer="layer1"
191+ showgrid="false"
192+ inkscape:window-width="1067"
193+ inkscape:window-height="1011"
194+ inkscape:window-x="0"
195+ inkscape:window-y="0"
196+ inkscape:window-maximized="0" />
197+ <metadata
198+ id="metadata7">
199+ <rdf:RDF>
200+ <cc:Work
201+ rdf:about="">
202+ <dc:format>image/svg+xml</dc:format>
203+ <dc:type
204+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
205+ <dc:title />
206+ </cc:Work>
207+ </rdf:RDF>
208+ </metadata>
209+ <g
210+ inkscape:label="Layer 1"
211+ inkscape:groupmode="layer"
212+ id="layer1">
213+ <rect
214+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
215+ id="rect6799"
216+ width="86"
217+ height="64"
218+ x="203"
219+ y="105.36218"
220+ inkscape:export-xdpi="61.120499"
221+ inkscape:export-ydpi="61.120499" />
222+ <text
223+ xml:space="preserve"
224+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
225+ x="201"
226+ y="211.36218"
227+ id="text6803"
228+ sodipodi:linespacing="125%"
229+ inkscape:export-xdpi="61.120499"
230+ inkscape:export-ydpi="61.120499"><tspan
231+ style="font-size:15px;fill:#ff0000"
232+ id="tspan6805"
233+ sodipodi:role="line"
234+ x="201"
235+ y="211.36218">RBind <tspan
236+ style="fill:#0000ff"
237+ id="tspan4367">TTName</tspan> (<tspan
238+ style="fill:#0000ff"
239+ id="tspan4363">Binder TT</tspan>) <tspan
240+ style="fill:#0000ff"
241+ id="tspan4365"> TT</tspan></tspan></text>
242+ <text
243+ sodipodi:linespacing="125%"
244+ id="text6807"
245+ y="127.36218"
246+ x="207"
247+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
248+ xml:space="preserve"
249+ inkscape:export-xdpi="61.120499"
250+ inkscape:export-ydpi="61.120499"><tspan
251+ y="127.36218"
252+ x="207"
253+ sodipodi:role="line"
254+ id="tspan6813"
255+ style="font-size:15px;fill:#0000ff">lhs:a</tspan><tspan
256+ y="146.11218"
257+ x="207"
258+ sodipodi:role="line"
259+ style="font-size:15px;fill:#0000ff"
260+ id="tspan4330">rhs:a</tspan></text>
261+ <text
262+ sodipodi:linespacing="125%"
263+ id="text6815"
264+ y="96.362183"
265+ x="201"
266+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
267+ xml:space="preserve"
268+ inkscape:export-xdpi="61.120499"
269+ inkscape:export-ydpi="61.120499"><tspan
270+ y="96.362183"
271+ x="201"
272+ sodipodi:role="line"
273+ id="tspan6817"
274+ style="font-size:15px;fill:#0000ff">FunClause</tspan></text>
275+ <rect
276+ inkscape:export-ydpi="61.120499"
277+ inkscape:export-xdpi="61.120499"
278+ y="177.36218"
279+ x="153"
280+ height="142"
281+ width="350"
282+ id="rect4332"
283+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
284+ <text
285+ inkscape:export-ydpi="61.120499"
286+ inkscape:export-xdpi="61.120499"
287+ xml:space="preserve"
288+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
289+ x="162"
290+ y="168.36218"
291+ id="text4340"
292+ sodipodi:linespacing="125%"><tspan
293+ style="font-size:15px;fill:#0000ff"
294+ id="tspan4342"
295+ sodipodi:role="line"
296+ x="162"
297+ y="168.36218">Raw</tspan></text>
298+ <path
299+ inkscape:export-ydpi="61.120499"
300+ inkscape:export-xdpi="61.120499"
301+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4349)"
302+ d="m 247,145.3622 c 28.96221,0.27049 22.31485,19.06346 -7,48"
303+ id="path4346"
304+ inkscape:connector-curvature="0"
305+ sodipodi:nodetypes="cc" />
306+ <text
307+ inkscape:export-ydpi="61.120499"
308+ inkscape:export-xdpi="61.120499"
309+ sodipodi:linespacing="125%"
310+ id="text4333"
311+ y="362.36218"
312+ x="343"
313+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
314+ xml:space="preserve"><tspan
315+ y="362.36218"
316+ x="343"
317+ sodipodi:role="line"
318+ id="tspan4335"
319+ style="font-size:15px;fill:#ff0000">PVar <tspan
320+ style="fill:#0000ff"
321+ id="tspan4415">a</tspan> (<tspan
322+ style="fill:#0000ff"
323+ id="tspan4369">Binder a</tspan>)</tspan></text>
324+ <path
325+ sodipodi:nodetypes="cc"
326+ inkscape:connector-curvature="0"
327+ id="path4337"
328+ d="m 336,214.3622 0,158"
329+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4407)"
330+ inkscape:export-xdpi="61.120499"
331+ inkscape:export-ydpi="61.120499" />
332+ <text
333+ xml:space="preserve"
334+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
335+ x="439"
336+ y="196.36218"
337+ id="text4339"
338+ sodipodi:linespacing="125%"
339+ inkscape:export-xdpi="61.120499"
340+ inkscape:export-ydpi="61.120499"><tspan
341+ style="font-size:15px;fill:#ff0000"
342+ id="tspan4341"
343+ sodipodi:role="line"
344+ x="439"
345+ y="196.36218">RApp Raw Raw</tspan></text>
346+ <path
347+ inkscape:export-ydpi="61.120499"
348+ inkscape:export-xdpi="61.120499"
349+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4359)"
350+ d="m 396,216.3622 c 22.67213,51.77028 75.6614,-87.82153 4,-37"
351+ id="path4343"
352+ inkscape:connector-curvature="0"
353+ sodipodi:nodetypes="cc" />
354+ <rect
355+ style="opacity:1;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
356+ id="rect4381"
357+ width="314"
358+ height="63"
359+ x="152"
360+ y="373.36218"
361+ inkscape:export-xdpi="61.120499"
362+ inkscape:export-ydpi="61.120499" />
363+ <text
364+ sodipodi:linespacing="125%"
365+ id="text4383"
366+ y="364.36218"
367+ x="161"
368+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
369+ xml:space="preserve"
370+ inkscape:export-xdpi="61.120499"
371+ inkscape:export-ydpi="61.120499"><tspan
372+ y="364.36218"
373+ x="161"
374+ sodipodi:role="line"
375+ id="tspan4385"
376+ style="font-size:15px;fill:#0000ff">Binder a</tspan></text>
377+ <text
378+ xml:space="preserve"
379+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
380+ x="208"
381+ y="254.36218"
382+ id="text4417"
383+ sodipodi:linespacing="125%"
384+ inkscape:export-xdpi="61.120499"
385+ inkscape:export-ydpi="61.120499"><tspan
386+ style="font-size:15px;fill:#ff0000"
387+ id="tspan4419"
388+ sodipodi:role="line"
389+ x="208"
390+ y="254.36218">`{{code}}</tspan></text>
391+ <text
392+ inkscape:export-ydpi="61.120499"
393+ inkscape:export-xdpi="61.120499"
394+ sodipodi:linespacing="125%"
395+ id="text4421"
396+ y="275.36218"
397+ x="242"
398+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
399+ xml:space="preserve"><tspan
400+ y="275.36218"
401+ x="242"
402+ sodipodi:role="line"
403+ id="tspan4423"
404+ style="font-size:15px;fill:#ff0000">`{{body}}</tspan></text>
405+ <path
406+ inkscape:export-ydpi="61.120499"
407+ inkscape:export-xdpi="61.120499"
408+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4427)"
409+ d="m 266,218.3622 -26,17"
410+ id="path4425"
411+ inkscape:connector-curvature="0"
412+ sodipodi:nodetypes="cc" />
413+ <path
414+ sodipodi:nodetypes="cc"
415+ inkscape:connector-curvature="0"
416+ id="path4431"
417+ d="m 272,217.3622 9,42"
418+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4433)"
419+ inkscape:export-xdpi="61.120499"
420+ inkscape:export-ydpi="61.120499" />
421+ <path
422+ sodipodi:nodetypes="cc"
423+ inkscape:connector-curvature="0"
424+ id="path4437"
425+ d="m 248,124.3622 c 30.28183,6.20207 31.24081,36.56361 -10,70"
426+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4439)"
427+ inkscape:export-xdpi="61.120499"
428+ inkscape:export-ydpi="61.120499" />
429+ </g>
430+</svg>
docs/image/idrisTopLevel.pngnew file

Binary file not shown.

docs/image/idrisTopLevel.svgnew file+524
@@ -0,0 +1,524 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="idrisTopLevel.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:stockid="Arrow1Mend"
23+ orient="auto"
24+ refY="0.0"
25+ refX="0.0"
26+ id="marker4198"
27+ style="overflow:visible;"
28+ inkscape:isstock="true">
29+ <path
30+ id="path4200"
31+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
32+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
33+ transform="scale(0.4) rotate(180) translate(10,0)" />
34+ </marker>
35+ <marker
36+ inkscape:isstock="true"
37+ style="overflow:visible;"
38+ id="marker4203"
39+ refX="0.0"
40+ refY="0.0"
41+ orient="auto"
42+ inkscape:stockid="Arrow1Mend"
43+ inkscape:collect="always">
44+ <path
45+ transform="scale(0.4) rotate(180) translate(10,0)"
46+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
47+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
48+ id="path4205" />
49+ </marker>
50+ <marker
51+ inkscape:stockid="Arrow1Mend"
52+ orient="auto"
53+ refY="0.0"
54+ refX="0.0"
55+ id="marker4197"
56+ style="overflow:visible;"
57+ inkscape:isstock="true"
58+ inkscape:collect="always">
59+ <path
60+ id="path4199"
61+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
62+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
63+ transform="scale(0.4) rotate(180) translate(10,0)" />
64+ </marker>
65+ <marker
66+ inkscape:stockid="Arrow1Mend"
67+ orient="auto"
68+ refY="0.0"
69+ refX="0.0"
70+ id="marker4182"
71+ style="overflow:visible;"
72+ inkscape:isstock="true">
73+ <path
74+ id="path4184"
75+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
76+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
77+ transform="scale(0.4) rotate(180) translate(10,0)" />
78+ </marker>
79+ <marker
80+ inkscape:isstock="true"
81+ style="overflow:visible;"
82+ id="marker4176"
83+ refX="0.0"
84+ refY="0.0"
85+ orient="auto"
86+ inkscape:stockid="Arrow1Mend"
87+ inkscape:collect="always">
88+ <path
89+ transform="scale(0.4) rotate(180) translate(10,0)"
90+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
91+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
92+ id="path4178" />
93+ </marker>
94+ <marker
95+ inkscape:stockid="Arrow1Mend"
96+ orient="auto"
97+ refY="0.0"
98+ refX="0.0"
99+ id="marker4830"
100+ style="overflow:visible;"
101+ inkscape:isstock="true"
102+ inkscape:collect="always">
103+ <path
104+ id="path4832"
105+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
106+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
107+ transform="scale(0.4) rotate(180) translate(10,0)" />
108+ </marker>
109+ <marker
110+ inkscape:stockid="Arrow1Mend"
111+ orient="auto"
112+ refY="0.0"
113+ refX="0.0"
114+ id="Arrow1Mend"
115+ style="overflow:visible;"
116+ inkscape:isstock="true"
117+ inkscape:collect="always">
118+ <path
119+ id="path4175"
120+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
121+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
122+ transform="scale(0.4) rotate(180) translate(10,0)" />
123+ </marker>
124+ </defs>
125+ <sodipodi:namedview
126+ id="base"
127+ pagecolor="#ffffff"
128+ bordercolor="#666666"
129+ borderopacity="1.0"
130+ inkscape:pageopacity="0.0"
131+ inkscape:pageshadow="2"
132+ inkscape:zoom="1"
133+ inkscape:cx="353.5"
134+ inkscape:cy="669.5"
135+ inkscape:document-units="px"
136+ inkscape:current-layer="layer1"
137+ showgrid="false"
138+ inkscape:window-width="1744"
139+ inkscape:window-height="1011"
140+ inkscape:window-x="-4"
141+ inkscape:window-y="0"
142+ inkscape:window-maximized="0" />
143+ <metadata
144+ id="metadata7">
145+ <rdf:RDF>
146+ <cc:Work
147+ rdf:about="">
148+ <dc:format>image/svg+xml</dc:format>
149+ <dc:type
150+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
151+ <dc:title />
152+ </cc:Work>
153+ </rdf:RDF>
154+ </metadata>
155+ <g
156+ inkscape:label="Layer 1"
157+ inkscape:groupmode="layer"
158+ id="layer1">
159+ <text
160+ xml:space="preserve"
161+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
162+ x="21"
163+ y="411.36221"
164+ id="text4136"
165+ sodipodi:linespacing="125%"
166+ inkscape:export-xdpi="61.120499"
167+ inkscape:export-ydpi="61.120499"><tspan
168+ sodipodi:role="line"
169+ id="tspan4138"
170+ x="21"
171+ y="411.36221"
172+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000">Idris</tspan></text>
173+ <text
174+ sodipodi:linespacing="125%"
175+ id="text4140"
176+ y="411.36221"
177+ x="203"
178+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
179+ xml:space="preserve"
180+ inkscape:export-xdpi="61.120499"
181+ inkscape:export-ydpi="61.120499"><tspan
182+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
183+ y="411.36221"
184+ x="203"
185+ id="tspan4142"
186+ sodipodi:role="line">Idris</tspan></text>
187+ <text
188+ xml:space="preserve"
189+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
190+ x="253"
191+ y="402.36218"
192+ id="text4144"
193+ sodipodi:linespacing="125%"
194+ inkscape:export-xdpi="61.120499"
195+ inkscape:export-ydpi="61.120499"><tspan
196+ sodipodi:role="line"
197+ id="tspan4146"
198+ x="253"
199+ y="402.36218"
200+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;">~</tspan></text>
201+ <text
202+ sodipodi:linespacing="125%"
203+ id="text4148"
204+ y="411.60635"
205+ x="451"
206+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
207+ xml:space="preserve"
208+ inkscape:export-xdpi="61.120499"
209+ inkscape:export-ydpi="61.120499"><tspan
210+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
211+ y="411.60635"
212+ x="451"
213+ id="tspan4150"
214+ sodipodi:role="line">TT</tspan></text>
215+ <text
216+ xml:space="preserve"
217+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
218+ x="610"
219+ y="411.36221"
220+ id="text4152"
221+ sodipodi:linespacing="125%"
222+ inkscape:export-xdpi="61.120499"
223+ inkscape:export-ydpi="61.120499"><tspan
224+ sodipodi:role="line"
225+ id="tspan4154"
226+ x="610"
227+ y="411.36221"
228+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000">Executable</tspan></text>
229+ <text
230+ sodipodi:linespacing="125%"
231+ id="text4156"
232+ y="436.36218"
233+ x="80"
234+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
235+ xml:space="preserve"
236+ inkscape:export-xdpi="61.120499"
237+ inkscape:export-ydpi="61.120499"><tspan
238+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
239+ y="436.36218"
240+ x="80"
241+ id="tspan4158"
242+ sodipodi:role="line">desugaring</tspan></text>
243+ <path
244+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
245+ d="M 81.977612,407.11261 188,407.3622"
246+ id="path4160"
247+ inkscape:connector-curvature="0"
248+ inkscape:export-xdpi="61.120499"
249+ inkscape:export-ydpi="61.120499"
250+ sodipodi:nodetypes="cc" />
251+ <text
252+ xml:space="preserve"
253+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
254+ x="281"
255+ y="432.36218"
256+ id="text4790"
257+ sodipodi:linespacing="125%"
258+ inkscape:export-xdpi="61.120499"
259+ inkscape:export-ydpi="61.120499"><tspan
260+ sodipodi:role="line"
261+ id="tspan4792"
262+ x="281"
263+ y="432.36218"
264+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">elaboration</tspan></text>
265+ <text
266+ sodipodi:linespacing="125%"
267+ id="text4824"
268+ y="394.36218"
269+ x="498"
270+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
271+ xml:space="preserve"
272+ inkscape:export-xdpi="61.120499"
273+ inkscape:export-ydpi="61.120499"><tspan
274+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
275+ y="394.36218"
276+ x="498"
277+ id="tspan4826"
278+ sodipodi:role="line">compilation</tspan></text>
279+ <path
280+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4830)"
281+ d="m 495,405.33981 105,0.0224"
282+ id="path4828"
283+ inkscape:connector-curvature="0"
284+ inkscape:export-xdpi="61.120499"
285+ inkscape:export-ydpi="61.120499"
286+ sodipodi:nodetypes="cc" />
287+ <text
288+ inkscape:export-ydpi="61.120499"
289+ inkscape:export-xdpi="61.120499"
290+ sodipodi:linespacing="125%"
291+ id="text4166"
292+ y="442.36218"
293+ x="609"
294+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
295+ xml:space="preserve"><tspan
296+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
297+ y="442.36218"
298+ x="609"
299+ id="tspan4168"
300+ sodipodi:role="line">C</tspan></text>
301+ <text
302+ xml:space="preserve"
303+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
304+ x="609"
305+ y="475.36218"
306+ id="text4170"
307+ sodipodi:linespacing="125%"
308+ inkscape:export-xdpi="61.120499"
309+ inkscape:export-ydpi="61.120499"><tspan
310+ sodipodi:role="line"
311+ id="tspan4172"
312+ x="609"
313+ y="475.36218"
314+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000">JS</tspan></text>
315+ <path
316+ inkscape:export-ydpi="61.120499"
317+ inkscape:export-xdpi="61.120499"
318+ inkscape:connector-curvature="0"
319+ id="path4174"
320+ d="m 495,406.3622 104,26"
321+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:8, 2;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4176)"
322+ sodipodi:nodetypes="cc" />
323+ <path
324+ sodipodi:nodetypes="cc"
325+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:12, 2;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker4182)"
326+ d="M 495,405.90781 599,467.3622"
327+ id="path4180"
328+ inkscape:connector-curvature="0"
329+ inkscape:export-xdpi="61.120499"
330+ inkscape:export-ydpi="61.120499" />
331+ <text
332+ inkscape:export-ydpi="61.120499"
333+ inkscape:export-xdpi="61.120499"
334+ xml:space="preserve"
335+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
336+ x="20"
337+ y="523.36218"
338+ id="text4186"
339+ sodipodi:linespacing="125%"><tspan
340+ sodipodi:role="line"
341+ x="20"
342+ y="523.36218"
343+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
344+ id="tspan4190">Add implicitly quantified variables.</tspan><tspan
345+ sodipodi:role="line"
346+ x="20"
347+ y="542.11218"
348+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
349+ id="tspan4191">Conditional expressions replaced by function calls.</tspan></text>
350+ <path
351+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
352+ d="m 120.29902,440.01416 0.098,70.81863"
353+ id="path4192"
354+ inkscape:connector-curvature="0"
355+ inkscape:export-xdpi="61.120499"
356+ inkscape:export-ydpi="61.120499"
357+ sodipodi:nodetypes="cc" />
358+ <text
359+ sodipodi:linespacing="125%"
360+ id="text4194"
361+ y="367.36218"
362+ x="358"
363+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
364+ xml:space="preserve"
365+ inkscape:export-xdpi="61.120499"
366+ inkscape:export-ydpi="61.120499"><tspan
367+ id="tspan4198"
368+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
369+ y="367.36218"
370+ x="358"
371+ sodipodi:role="line">proof tactics</tspan></text>
372+ <path
373+ inkscape:connector-curvature="0"
374+ id="path4202"
375+ d="m 382.73881,368.53384 0.16418,32.3209"
376+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
377+ sodipodi:nodetypes="cc"
378+ inkscape:export-xdpi="61.120499"
379+ inkscape:export-ydpi="61.120499" />
380+ <path
381+ inkscape:export-ydpi="61.120499"
382+ inkscape:export-xdpi="61.120499"
383+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4197)"
384+ d="m 277,403.3622 37.7728,-0.0912"
385+ id="path4195"
386+ inkscape:connector-curvature="0"
387+ sodipodi:nodetypes="cc" />
388+ <path
389+ sodipodi:nodetypes="cc"
390+ inkscape:connector-curvature="0"
391+ id="path4201"
392+ d="m 335,403.15739 37.8864,-0.31841"
393+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4203)"
394+ inkscape:export-xdpi="61.120499"
395+ inkscape:export-ydpi="61.120499" />
396+ <text
397+ inkscape:export-ydpi="61.120499"
398+ inkscape:export-xdpi="61.120499"
399+ xml:space="preserve"
400+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
401+ x="215"
402+ y="340.36218"
403+ id="text4207"
404+ sodipodi:linespacing="125%"><tspan
405+ sodipodi:role="line"
406+ x="215"
407+ y="340.36218"
408+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
409+ id="tspan4209">during elaboration</tspan><tspan
410+ sodipodi:role="line"
411+ x="215"
412+ y="359.11218"
413+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
414+ id="tspan4213">may contain holes</tspan><tspan
415+ sodipodi:role="line"
416+ x="215"
417+ y="377.86218"
418+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
419+ id="tspan4199">and guesses</tspan></text>
420+ <path
421+ inkscape:export-ydpi="61.120499"
422+ inkscape:export-xdpi="61.120499"
423+ sodipodi:nodetypes="cc"
424+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
425+ d="m 324,399.3622 0.11194,-38.03731"
426+ id="path4211"
427+ inkscape:connector-curvature="0" />
428+ <text
429+ sodipodi:linespacing="125%"
430+ id="text4215"
431+ y="461.36218"
432+ x="233"
433+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
434+ xml:space="preserve"
435+ inkscape:export-xdpi="61.120499"
436+ inkscape:export-ydpi="61.120499"><tspan
437+ id="tspan4217"
438+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
439+ y="461.36218"
440+ x="233"
441+ sodipodi:role="line">Make explicit all types.</tspan><tspan
442+ id="tspan4223"
443+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
444+ y="480.11218"
445+ x="233"
446+ sodipodi:role="line">Make explicit function and </tspan><tspan
447+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
448+ y="498.86218"
449+ x="233"
450+ sodipodi:role="line"
451+ id="tspan4235"> pattern match variables.</tspan></text>
452+ <path
453+ inkscape:export-ydpi="61.120499"
454+ inkscape:export-xdpi="61.120499"
455+ sodipodi:nodetypes="cc"
456+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
457+ d="m 323.7402,434.372 0.0637,16.14706"
458+ id="path4237"
459+ inkscape:connector-curvature="0" />
460+ <path
461+ inkscape:export-ydpi="61.120499"
462+ inkscape:export-xdpi="61.120499"
463+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4198)"
464+ d="m 395,402.49819 45.38391,-0.31841"
465+ id="path4196"
466+ inkscape:connector-curvature="0"
467+ sodipodi:nodetypes="cc" />
468+ <text
469+ inkscape:export-ydpi="61.120499"
470+ inkscape:export-xdpi="61.120499"
471+ xml:space="preserve"
472+ style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
473+ x="431"
474+ y="465.36218"
475+ id="text4202"
476+ sodipodi:linespacing="125%"><tspan
477+ sodipodi:role="line"
478+ x="431"
479+ y="465.36218"
480+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
481+ id="tspan4204">type checker</tspan><tspan
482+ sodipodi:role="line"
483+ x="431"
484+ y="484.11218"
485+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
486+ id="tspan4208">Raw -&gt; TT</tspan></text>
487+ <path
488+ inkscape:export-ydpi="61.120499"
489+ inkscape:export-xdpi="61.120499"
490+ sodipodi:nodetypes="cc"
491+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
492+ d="m 421,411.3622 39,40"
493+ id="path4206"
494+ inkscape:connector-curvature="0" />
495+ <text
496+ inkscape:export-ydpi="61.120499"
497+ inkscape:export-xdpi="61.120499"
498+ xml:space="preserve"
499+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
500+ x="378"
501+ y="417.36218"
502+ id="text4203"
503+ sodipodi:linespacing="125%"><tspan
504+ sodipodi:role="line"
505+ id="tspan4205"
506+ x="378"
507+ y="417.36218"
508+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000">Raw</tspan></text>
509+ <text
510+ sodipodi:linespacing="125%"
511+ id="text4205"
512+ y="432.36218"
513+ x="201"
514+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
515+ xml:space="preserve"
516+ inkscape:export-xdpi="61.120499"
517+ inkscape:export-ydpi="61.120499"><tspan
518+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000"
519+ y="432.36218"
520+ x="201"
521+ id="tspan4207"
522+ sodipodi:role="line">PTerm</tspan></text>
523+ </g>
524+</svg>
docs/image/login.pngnew file

Binary file not shown.

docs/image/netstate.pngnew file

Binary file not shown.

docs/image/parserModules.pngnew file

Binary file not shown.

docs/image/parserModules.svgnew file+1251
@@ -0,0 +1,1251 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 210 297"
15+ version="1.1"
16+ id="svg8"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="parserModules.svg">
19+ <defs
20+ id="defs2">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker1078"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow1Mend">
29+ <path
30+ transform="scale(0.4) rotate(180) translate(10,0)"
31+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
32+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
33+ id="path1076" />
34+ </marker>
35+ <marker
36+ inkscape:isstock="true"
37+ style="overflow:visible"
38+ id="marker1074"
39+ refX="0.0"
40+ refY="0.0"
41+ orient="auto"
42+ inkscape:stockid="Arrow1Mstart">
43+ <path
44+ transform="scale(0.4) translate(10,0)"
45+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
46+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
47+ id="path1072" />
48+ </marker>
49+ <marker
50+ inkscape:stockid="Arrow1Mend"
51+ orient="auto"
52+ refY="0.0"
53+ refX="0.0"
54+ id="marker1021"
55+ style="overflow:visible;"
56+ inkscape:isstock="true"
57+ inkscape:collect="always">
58+ <path
59+ id="path1019"
60+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
61+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
62+ transform="scale(0.4) rotate(180) translate(10,0)" />
63+ </marker>
64+ <marker
65+ inkscape:stockid="Arrow1Mstart"
66+ orient="auto"
67+ refY="0.0"
68+ refX="0.0"
69+ id="marker1017"
70+ style="overflow:visible"
71+ inkscape:isstock="true"
72+ inkscape:collect="always">
73+ <path
74+ id="path1015"
75+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
76+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
77+ transform="scale(0.4) translate(10,0)" />
78+ </marker>
79+ <marker
80+ inkscape:isstock="true"
81+ style="overflow:visible;"
82+ id="marker973"
83+ refX="0.0"
84+ refY="0.0"
85+ orient="auto"
86+ inkscape:stockid="Arrow1Mend"
87+ inkscape:collect="always">
88+ <path
89+ transform="scale(0.4) rotate(180) translate(10,0)"
90+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
91+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
92+ id="path971" />
93+ </marker>
94+ <marker
95+ inkscape:isstock="true"
96+ style="overflow:visible"
97+ id="marker969"
98+ refX="0.0"
99+ refY="0.0"
100+ orient="auto"
101+ inkscape:stockid="Arrow1Mstart"
102+ inkscape:collect="always">
103+ <path
104+ transform="scale(0.4) translate(10,0)"
105+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
106+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
107+ id="path967" />
108+ </marker>
109+ <marker
110+ inkscape:stockid="Arrow1Mend"
111+ orient="auto"
112+ refY="0.0"
113+ refX="0.0"
114+ id="Arrow1Mend"
115+ style="overflow:visible;"
116+ inkscape:isstock="true"
117+ inkscape:collect="always">
118+ <path
119+ id="path1214"
120+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
121+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
122+ transform="scale(0.4) rotate(180) translate(10,0)" />
123+ </marker>
124+ <marker
125+ inkscape:stockid="Arrow1Mstart"
126+ orient="auto"
127+ refY="0.0"
128+ refX="0.0"
129+ id="Arrow1Mstart"
130+ style="overflow:visible"
131+ inkscape:isstock="true"
132+ inkscape:collect="always">
133+ <path
134+ id="path1211"
135+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
136+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
137+ transform="scale(0.4) translate(10,0)" />
138+ </marker>
139+ <marker
140+ inkscape:isstock="true"
141+ style="overflow:visible;"
142+ id="marker1000"
143+ refX="0.0"
144+ refY="0.0"
145+ orient="auto"
146+ inkscape:stockid="Arrow1Mend">
147+ <path
148+ transform="scale(0.4) rotate(180) translate(10,0)"
149+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
150+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
151+ id="path998" />
152+ </marker>
153+ <marker
154+ inkscape:isstock="true"
155+ style="overflow:visible;"
156+ id="marker1127"
157+ refX="0.0"
158+ refY="0.0"
159+ orient="auto"
160+ inkscape:stockid="Arrow1Mend">
161+ <path
162+ transform="scale(0.4) rotate(180) translate(10,0)"
163+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
164+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
165+ id="path1125" />
166+ </marker>
167+ <marker
168+ inkscape:isstock="true"
169+ style="overflow:visible;"
170+ id="marker1123"
171+ refX="0.0"
172+ refY="0.0"
173+ orient="auto"
174+ inkscape:stockid="Arrow1Mend">
175+ <path
176+ transform="scale(0.4) rotate(180) translate(10,0)"
177+ style="fill-rule:evenodd;stroke:#00aa3f;stroke-width:1pt;stroke-opacity:1;fill:#00aa3f;fill-opacity:1"
178+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
179+ id="path1121" />
180+ </marker>
181+ <marker
182+ inkscape:isstock="true"
183+ style="overflow:visible;"
184+ id="marker1117"
185+ refX="0.0"
186+ refY="0.0"
187+ orient="auto"
188+ inkscape:stockid="Arrow1Mend">
189+ <path
190+ transform="scale(0.4) rotate(180) translate(10,0)"
191+ style="fill-rule:evenodd;stroke:#00aa3f;stroke-width:1pt;stroke-opacity:1;fill:#00aa3f;fill-opacity:1"
192+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
193+ id="path1115" />
194+ </marker>
195+ <marker
196+ inkscape:stockid="Arrow1Mend"
197+ orient="auto"
198+ refY="0.0"
199+ refX="0.0"
200+ id="marker1111"
201+ style="overflow:visible;"
202+ inkscape:isstock="true"
203+ inkscape:collect="always">
204+ <path
205+ id="path1109"
206+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
207+ style="fill-rule:evenodd;stroke:#00aa3f;stroke-width:1pt;stroke-opacity:1;fill:#00aa3f;fill-opacity:1"
208+ transform="scale(0.4) rotate(180) translate(10,0)" />
209+ </marker>
210+ <marker
211+ inkscape:isstock="true"
212+ style="overflow:visible;"
213+ id="marker1105"
214+ refX="0.0"
215+ refY="0.0"
216+ orient="auto"
217+ inkscape:stockid="Arrow1Mend"
218+ inkscape:collect="always">
219+ <path
220+ transform="scale(0.4) rotate(180) translate(10,0)"
221+ style="fill-rule:evenodd;stroke:#00aa3f;stroke-width:1pt;stroke-opacity:1;fill:#00aa3f;fill-opacity:1"
222+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
223+ id="path1103" />
224+ </marker>
225+ <marker
226+ inkscape:isstock="true"
227+ style="overflow:visible;"
228+ id="marker1057"
229+ refX="0.0"
230+ refY="0.0"
231+ orient="auto"
232+ inkscape:stockid="Arrow1Mend">
233+ <path
234+ transform="scale(0.4) rotate(180) translate(10,0)"
235+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
236+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
237+ id="path1055" />
238+ </marker>
239+ <marker
240+ inkscape:stockid="Arrow1Mend"
241+ orient="auto"
242+ refY="0.0"
243+ refX="0.0"
244+ id="marker1045"
245+ style="overflow:visible;"
246+ inkscape:isstock="true"
247+ inkscape:collect="always">
248+ <path
249+ id="path1043"
250+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
251+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
252+ transform="scale(0.4) rotate(180) translate(10,0)" />
253+ </marker>
254+ <marker
255+ inkscape:stockid="Arrow1Mend"
256+ orient="auto"
257+ refY="0.0"
258+ refX="0.0"
259+ id="marker1033"
260+ style="overflow:visible;"
261+ inkscape:isstock="true">
262+ <path
263+ id="path1031"
264+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
265+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
266+ transform="scale(0.4) rotate(180) translate(10,0)" />
267+ </marker>
268+ <marker
269+ inkscape:stockid="Arrow1Mend"
270+ orient="auto"
271+ refY="0.0"
272+ refX="0.0"
273+ id="marker1027"
274+ style="overflow:visible;"
275+ inkscape:isstock="true">
276+ <path
277+ id="path1025"
278+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
279+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
280+ transform="scale(0.4) rotate(180) translate(10,0)" />
281+ </marker>
282+ <marker
283+ inkscape:isstock="true"
284+ style="overflow:visible;"
285+ id="marker1015"
286+ refX="0.0"
287+ refY="0.0"
288+ orient="auto"
289+ inkscape:stockid="Arrow1Mend"
290+ inkscape:collect="always">
291+ <path
292+ transform="scale(0.4) rotate(180) translate(10,0)"
293+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
294+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
295+ id="path1013" />
296+ </marker>
297+ <marker
298+ inkscape:isstock="true"
299+ style="overflow:visible;"
300+ id="marker1009"
301+ refX="0.0"
302+ refY="0.0"
303+ orient="auto"
304+ inkscape:stockid="Arrow1Mend">
305+ <path
306+ transform="scale(0.4) rotate(180) translate(10,0)"
307+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
308+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
309+ id="path1007" />
310+ </marker>
311+ <marker
312+ inkscape:isstock="true"
313+ style="overflow:visible;"
314+ id="marker1003"
315+ refX="0.0"
316+ refY="0.0"
317+ orient="auto"
318+ inkscape:stockid="Arrow1Mend">
319+ <path
320+ transform="scale(0.4) rotate(180) translate(10,0)"
321+ style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
322+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
323+ id="path1001" />
324+ </marker>
325+ <marker
326+ inkscape:stockid="Arrow1Mend"
327+ orient="auto"
328+ refY="0.0"
329+ refX="0.0"
330+ id="marker997"
331+ style="overflow:visible;"
332+ inkscape:isstock="true"
333+ inkscape:collect="always">
334+ <path
335+ id="path995"
336+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
337+ style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
338+ transform="scale(0.4) rotate(180) translate(10,0)" />
339+ </marker>
340+ <marker
341+ inkscape:isstock="true"
342+ style="overflow:visible;"
343+ id="marker991"
344+ refX="0.0"
345+ refY="0.0"
346+ orient="auto"
347+ inkscape:stockid="Arrow1Mend"
348+ inkscape:collect="always">
349+ <path
350+ transform="scale(0.4) rotate(180) translate(10,0)"
351+ style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
352+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
353+ id="path989" />
354+ </marker>
355+ <marker
356+ inkscape:stockid="Arrow1Mend"
357+ orient="auto"
358+ refY="0.0"
359+ refX="0.0"
360+ id="marker967"
361+ style="overflow:visible;"
362+ inkscape:isstock="true"
363+ inkscape:collect="always">
364+ <path
365+ id="path965"
366+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
367+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
368+ transform="scale(0.4) rotate(180) translate(10,0)" />
369+ </marker>
370+ <marker
371+ inkscape:isstock="true"
372+ style="overflow:visible;"
373+ id="marker961"
374+ refX="0.0"
375+ refY="0.0"
376+ orient="auto"
377+ inkscape:stockid="Arrow1Mend"
378+ inkscape:collect="always">
379+ <path
380+ transform="scale(0.4) rotate(180) translate(10,0)"
381+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
382+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
383+ id="path959" />
384+ </marker>
385+ <marker
386+ inkscape:isstock="true"
387+ style="overflow:visible;"
388+ id="marker3617"
389+ refX="0.0"
390+ refY="0.0"
391+ orient="auto"
392+ inkscape:stockid="Arrow1Mend">
393+ <path
394+ transform="scale(0.4) rotate(180) translate(10,0)"
395+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
396+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
397+ id="path3615" />
398+ </marker>
399+ <marker
400+ inkscape:stockid="Arrow1Mend"
401+ orient="auto"
402+ refY="0.0"
403+ refX="0.0"
404+ id="marker2049"
405+ style="overflow:visible;"
406+ inkscape:isstock="true"
407+ inkscape:collect="always">
408+ <path
409+ id="path2047"
410+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
411+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
412+ transform="scale(0.4) rotate(180) translate(10,0)" />
413+ </marker>
414+ <marker
415+ inkscape:isstock="true"
416+ style="overflow:visible;"
417+ id="marker1539"
418+ refX="0.0"
419+ refY="0.0"
420+ orient="auto"
421+ inkscape:stockid="Arrow1Mend"
422+ inkscape:collect="always">
423+ <path
424+ transform="scale(0.4) rotate(180) translate(10,0)"
425+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
426+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
427+ id="path1537" />
428+ </marker>
429+ </defs>
430+ <sodipodi:namedview
431+ id="base"
432+ pagecolor="#ffffff"
433+ bordercolor="#666666"
434+ borderopacity="1.0"
435+ inkscape:pageopacity="0.0"
436+ inkscape:pageshadow="2"
437+ inkscape:zoom="1"
438+ inkscape:cx="368.33949"
439+ inkscape:cy="547.05121"
440+ inkscape:document-units="mm"
441+ inkscape:current-layer="layer1"
442+ showgrid="false"
443+ inkscape:window-width="1800"
444+ inkscape:window-height="1011"
445+ inkscape:window-x="86"
446+ inkscape:window-y="0"
447+ inkscape:window-maximized="0"
448+ inkscape:snap-nodes="false" />
449+ <metadata
450+ id="metadata5">
451+ <rdf:RDF>
452+ <cc:Work
453+ rdf:about="">
454+ <dc:format>image/svg+xml</dc:format>
455+ <dc:type
456+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
457+ <dc:title />
458+ </cc:Work>
459+ </rdf:RDF>
460+ </metadata>
461+ <g
462+ inkscape:label="Layer 1"
463+ inkscape:groupmode="layer"
464+ id="layer1">
465+ <text
466+ inkscape:export-ydpi="61.120499"
467+ inkscape:export-xdpi="61.120499"
468+ id="text854"
469+ y="119.72919"
470+ x="131.23334"
471+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
472+ xml:space="preserve"><tspan
473+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
474+ y="129.46077"
475+ x="131.23334"
476+ id="tspan852"
477+ sodipodi:role="line" /></text>
478+ <rect
479+ inkscape:export-ydpi="61.120499"
480+ inkscape:export-xdpi="61.120499"
481+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
482+ id="rect875"
483+ width="43.656246"
484+ height="18.520832"
485+ x="92.339577"
486+ y="110.20418" />
487+ <path
488+ inkscape:export-ydpi="61.120499"
489+ inkscape:export-xdpi="61.120499"
490+ inkscape:connector-curvature="0"
491+ id="path881"
492+ d="m 135.73129,118.93554 16.66875,-0.26459"
493+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2049)" />
494+ <text
495+ inkscape:export-ydpi="61.120499"
496+ inkscape:export-xdpi="61.120499"
497+ id="text895"
498+ y="115.76046"
499+ x="138.37698"
500+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
501+ xml:space="preserve"><tspan
502+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
503+ y="115.76046"
504+ x="138.37698"
505+ id="tspan893"
506+ sodipodi:role="line">PTerm</tspan></text>
507+ <text
508+ inkscape:export-ydpi="61.120499"
509+ inkscape:export-xdpi="61.120499"
510+ id="text903"
511+ y="115.23129"
512+ x="93.927078"
513+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
514+ xml:space="preserve"><tspan
515+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332"
516+ y="115.23129"
517+ x="93.927078"
518+ id="tspan901"
519+ sodipodi:role="line">module Idris.Parser</tspan><tspan
520+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332"
521+ y="128.46045"
522+ x="93.927078"
523+ sodipodi:role="line"
524+ id="tspan1021" /></text>
525+ <rect
526+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
527+ id="rect905"
528+ width="44.185421"
529+ height="18.785423"
530+ x="40.463421"
531+ y="141.50723"
532+ inkscape:export-xdpi="61.120499"
533+ inkscape:export-ydpi="61.120499" />
534+ <rect
535+ y="155.183"
536+ x="95.51458"
537+ height="18.256256"
538+ width="49.212498"
539+ id="rect907"
540+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
541+ inkscape:export-xdpi="61.120499"
542+ inkscape:export-ydpi="61.120499" />
543+ <path
544+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker961)"
545+ d="m 84.648837,152.88468 9.013662,7.32603"
546+ id="path909"
547+ inkscape:connector-curvature="0"
548+ inkscape:export-xdpi="61.120499"
549+ inkscape:export-ydpi="61.120499"
550+ sodipodi:nodetypes="cc" />
551+ <path
552+ inkscape:connector-curvature="0"
553+ id="path911"
554+ d="m 22.471756,152.09108 16.66875,-0.26459"
555+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1539)"
556+ inkscape:export-xdpi="61.120499"
557+ inkscape:export-ydpi="61.120499" />
558+ <text
559+ xml:space="preserve"
560+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
561+ x="24.059256"
562+ y="148.91547"
563+ id="text917"
564+ inkscape:export-xdpi="61.120499"
565+ inkscape:export-ydpi="61.120499"><tspan
566+ sodipodi:role="line"
567+ id="tspan915"
568+ x="24.059256"
569+ y="148.91547"
570+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332">String</tspan></text>
571+ <text
572+ id="text923"
573+ y="137.72075"
574+ x="65.087494"
575+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
576+ xml:space="preserve"
577+ inkscape:export-xdpi="61.120499"
578+ inkscape:export-ydpi="61.120499"><tspan
579+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
580+ y="137.72075"
581+ x="65.087494"
582+ sodipodi:role="line"
583+ id="tspan921">List (TokenData Token)</tspan></text>
584+ <text
585+ id="text931"
586+ y="218.41846"
587+ x="36.512497"
588+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
589+ xml:space="preserve"
590+ inkscape:export-xdpi="61.120499"
591+ inkscape:export-ydpi="61.120499"><tspan
592+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;"
593+ y="218.41846"
594+ x="36.512497"
595+ id="tspan929"
596+ sodipodi:role="line">module Text.Lexer</tspan></text>
597+ <text
598+ xml:space="preserve"
599+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
600+ x="98.160408"
601+ y="161.00386"
602+ id="text935"
603+ inkscape:export-xdpi="61.120499"
604+ inkscape:export-ydpi="61.120499"><tspan
605+ sodipodi:role="line"
606+ id="tspan933"
607+ x="98.160408"
608+ y="161.00386"
609+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">module Parser.Support</tspan></text>
610+ <rect
611+ inkscape:export-ydpi="61.120499"
612+ inkscape:export-xdpi="61.120499"
613+ y="214.18488"
614+ x="32.01458"
615+ height="6.3500061"
616+ width="43.656254"
617+ id="rect937"
618+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
619+ <rect
620+ inkscape:export-ydpi="61.120499"
621+ inkscape:export-xdpi="61.120499"
622+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
623+ id="rect939"
624+ width="42.862495"
625+ height="6.8791728"
626+ x="94.985413"
627+ y="214.18488" />
628+ <text
629+ inkscape:export-ydpi="61.120499"
630+ inkscape:export-xdpi="61.120499"
631+ xml:space="preserve"
632+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
633+ x="42.31551"
634+ y="147.59224"
635+ id="text951"><tspan
636+ sodipodi:role="line"
637+ id="tspan949"
638+ x="42.31551"
639+ y="147.59224"
640+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">module Parser.Lexer</tspan></text>
641+ <path
642+ sodipodi:nodetypes="cc"
643+ inkscape:export-ydpi="61.120499"
644+ inkscape:export-xdpi="61.120499"
645+ inkscape:connector-curvature="0"
646+ id="path963"
647+ d="m 53.299561,213.22831 1.53604,-51.85834"
648+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker967)" />
649+ <text
650+ inkscape:export-ydpi="61.120499"
651+ inkscape:export-xdpi="61.120499"
652+ xml:space="preserve"
653+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
654+ x="23.220526"
655+ y="251.01649"
656+ id="text971"><tspan
657+ sodipodi:role="line"
658+ id="tspan969"
659+ x="23.220526"
660+ y="251.01649"
661+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;">module Text.Lexer.Core</tspan></text>
662+ <rect
663+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
664+ id="rect973"
665+ width="47.889587"
666+ height="6.3500061"
667+ x="21.633026"
668+ y="246.51833"
669+ inkscape:export-xdpi="61.120499"
670+ inkscape:export-ydpi="61.120499" />
671+ <path
672+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker991)"
673+ d="m 48.369316,228.83873 0.04943,-6.71548"
674+ id="path975"
675+ inkscape:connector-curvature="0"
676+ inkscape:export-xdpi="61.120499"
677+ inkscape:export-ydpi="61.120499"
678+ sodipodi:nodetypes="cc" />
679+ <text
680+ id="text979"
681+ y="241.96643"
682+ x="23.283329"
683+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
684+ xml:space="preserve"
685+ inkscape:export-xdpi="61.120499"
686+ inkscape:export-ydpi="61.120499"><tspan
687+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;"
688+ y="241.96643"
689+ x="23.283329"
690+ id="tspan977"
691+ sodipodi:role="line">module Text.Quantity</tspan></text>
692+ <rect
693+ inkscape:export-ydpi="61.120499"
694+ inkscape:export-xdpi="61.120499"
695+ y="237.46826"
696+ x="21.695829"
697+ height="6.2469702"
698+ width="43.853985"
699+ id="rect981"
700+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
701+ <text
702+ inkscape:export-ydpi="61.120499"
703+ inkscape:export-xdpi="61.120499"
704+ xml:space="preserve"
705+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
706+ x="23.18244"
707+ y="233.68523"
708+ id="text985"><tspan
709+ sodipodi:role="line"
710+ id="tspan983"
711+ x="23.18244"
712+ y="233.68523"
713+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;">module Text.Token</tspan></text>
714+ <rect
715+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
716+ id="rect987"
717+ width="39.011257"
718+ height="5.9464455"
719+ x="21.59494"
720+ y="229.18706"
721+ inkscape:export-xdpi="61.120499"
722+ inkscape:export-ydpi="61.120499" />
723+ <path
724+ sodipodi:nodetypes="cc"
725+ inkscape:export-ydpi="61.120499"
726+ inkscape:export-xdpi="61.120499"
727+ inkscape:connector-curvature="0"
728+ id="path993"
729+ d="M 62.998384,237.01083 62.846037,221.92147"
730+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker997)" />
731+ <path
732+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1003)"
733+ d="M 67.336659,246.29272 67.083422,221.71969"
734+ id="path999"
735+ inkscape:connector-curvature="0"
736+ inkscape:export-xdpi="61.120499"
737+ inkscape:export-ydpi="61.120499"
738+ sodipodi:nodetypes="cc" />
739+ <path
740+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1009)"
741+ d="M 73.937074,214.02206 94.72083,169.47102"
742+ id="path1005"
743+ inkscape:connector-curvature="0"
744+ inkscape:export-xdpi="61.120499"
745+ inkscape:export-ydpi="61.120499"
746+ sodipodi:nodetypes="cc" />
747+ <path
748+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1015)"
749+ d="M 108.0684,213.75748 108.0169,173.5408"
750+ id="path1011"
751+ inkscape:connector-curvature="0"
752+ inkscape:export-xdpi="61.120499"
753+ inkscape:export-ydpi="61.120499"
754+ sodipodi:nodetypes="cc" />
755+ <text
756+ inkscape:export-ydpi="61.120499"
757+ inkscape:export-xdpi="61.120499"
758+ id="text1019"
759+ y="218.94762"
760+ x="96.837494"
761+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
762+ xml:space="preserve"><tspan
763+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;"
764+ y="218.94762"
765+ x="96.837494"
766+ id="tspan1017"
767+ sodipodi:role="line">module Text.Parser</tspan></text>
768+ <path
769+ sodipodi:nodetypes="cc"
770+ inkscape:export-ydpi="61.120499"
771+ inkscape:export-xdpi="61.120499"
772+ inkscape:connector-curvature="0"
773+ id="path1023"
774+ d="m 113.62466,154.75539 0.0397,-25.06978"
775+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1027)" />
776+ <path
777+ sodipodi:nodetypes="cc"
778+ inkscape:export-ydpi="61.120499"
779+ inkscape:export-xdpi="61.120499"
780+ inkscape:connector-curvature="0"
781+ id="path1029"
782+ d="M 83.757032,147.15485 97.991855,129.77582"
783+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1033)" />
784+ <rect
785+ y="142.91107"
786+ x="118.15033"
787+ height="6.6968417"
788+ width="45.2328"
789+ id="rect1035"
790+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
791+ inkscape:export-xdpi="61.120499"
792+ inkscape:export-ydpi="61.120499" />
793+ <path
794+ sodipodi:nodetypes="cc"
795+ inkscape:export-ydpi="61.120499"
796+ inkscape:export-xdpi="61.120499"
797+ inkscape:connector-curvature="0"
798+ id="path1037"
799+ d="m 121.83513,142.5835 -0.0515,-12.72267"
800+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1057)" />
801+ <text
802+ xml:space="preserve"
803+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
804+ x="120.00241"
805+ y="147.67372"
806+ id="text1041"
807+ inkscape:export-xdpi="61.120499"
808+ inkscape:export-ydpi="61.120499"><tspan
809+ sodipodi:role="line"
810+ id="tspan1039"
811+ x="120.00241"
812+ y="147.67372"
813+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">module TTImp.TTImp</tspan></text>
814+ <rect
815+ inkscape:export-ydpi="61.120499"
816+ inkscape:export-xdpi="61.120499"
817+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
818+ id="rect1047"
819+ width="42.862495"
820+ height="6.8791728"
821+ x="125.28364"
822+ y="133.0603" />
823+ <path
824+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1045)"
825+ d="m 145.18016,132.82376 -9.18434,-4.09859"
826+ id="path1049"
827+ inkscape:connector-curvature="0"
828+ inkscape:export-xdpi="61.120499"
829+ inkscape:export-ydpi="61.120499"
830+ sodipodi:nodetypes="cc" />
831+ <text
832+ inkscape:export-ydpi="61.120499"
833+ inkscape:export-xdpi="61.120499"
834+ id="text1053"
835+ y="137.82295"
836+ x="127.13572"
837+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
838+ xml:space="preserve"><tspan
839+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332"
840+ y="137.82295"
841+ x="127.13572"
842+ id="tspan1051"
843+ sodipodi:role="line">module Idris.Syntax</tspan></text>
844+ <rect
845+ inkscape:export-ydpi="61.120499"
846+ inkscape:export-xdpi="61.120499"
847+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#00871c;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
848+ id="rect1061"
849+ width="59.266659"
850+ height="16.13958"
851+ x="97.102074"
852+ y="186.93335" />
853+ <path
854+ inkscape:export-ydpi="61.120499"
855+ inkscape:export-xdpi="61.120499"
856+ inkscape:connector-curvature="0"
857+ id="path1063"
858+ d="m 76.993749,160.21044 18.785417,28.83958"
859+ style="fill:none;stroke:#00aa3f;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1105)"
860+ sodipodi:nodetypes="cc" />
861+ <text
862+ inkscape:export-ydpi="61.120499"
863+ inkscape:export-xdpi="61.120499"
864+ id="text1081"
865+ y="192.48962"
866+ x="157.95586"
867+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
868+ xml:space="preserve"><tspan
869+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332"
870+ y="192.48962"
871+ x="157.95586"
872+ id="tspan1079"
873+ sodipodi:role="line">SExp</tspan></text>
874+ <text
875+ inkscape:export-ydpi="61.120499"
876+ inkscape:export-xdpi="61.120499"
877+ id="text1089"
878+ y="192.75421"
879+ x="98.954155"
880+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
881+ xml:space="preserve"><tspan
882+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332"
883+ y="192.75421"
884+ x="98.954155"
885+ id="tspan1087"
886+ sodipodi:role="line">module Idris.IDEMode.Parser</tspan></text>
887+ <rect
888+ inkscape:export-ydpi="61.120499"
889+ inkscape:export-xdpi="61.120499"
890+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#7c007d;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
891+ id="rect1097"
892+ width="55.033333"
893+ height="14.287498"
894+ x="20.637447"
895+ y="52.524986" />
896+ <text
897+ inkscape:export-ydpi="61.120499"
898+ inkscape:export-xdpi="61.120499"
899+ id="text1101"
900+ y="58.610428"
901+ x="23.54781"
902+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#800080;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
903+ xml:space="preserve"><tspan
904+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#800080;stroke-width:0.26458332;"
905+ y="58.610428"
906+ x="23.54781"
907+ id="tspan1099"
908+ sodipodi:role="line">module Idris.REPL</tspan></text>
909+ <path
910+ sodipodi:nodetypes="cc"
911+ style="fill:none;stroke:#00aa3f;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1111)"
912+ d="m 112.97708,174.23335 0,14.02292"
913+ id="path1107"
914+ inkscape:connector-curvature="0"
915+ inkscape:export-xdpi="61.120499"
916+ inkscape:export-ydpi="61.120499" />
917+ <path
918+ inkscape:export-ydpi="61.120499"
919+ inkscape:export-xdpi="61.120499"
920+ inkscape:connector-curvature="0"
921+ id="path1113"
922+ d="m 148.43125,150.15592 0.26458,35.71911"
923+ style="fill:none;stroke:#00aa3f;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1117)"
924+ sodipodi:nodetypes="cc" />
925+ <path
926+ inkscape:export-ydpi="61.120499"
927+ inkscape:export-xdpi="61.120499"
928+ inkscape:connector-curvature="0"
929+ id="path1119"
930+ d="m 156.56889,195.56696 13.16435,-0.41532"
931+ style="fill:none;stroke:#00aa3f;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1123)"
932+ sodipodi:nodetypes="cc" />
933+ <text
934+ id="text950"
935+ y="104.70191"
936+ x="22.426785"
937+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
938+ xml:space="preserve"
939+ inkscape:export-xdpi="61.120499"
940+ inkscape:export-ydpi="61.120499"><tspan
941+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332"
942+ y="104.70191"
943+ x="22.426785"
944+ id="tspan948"
945+ sodipodi:role="line">module Core.Core</tspan></text>
946+ <rect
947+ inkscape:export-ydpi="61.120499"
948+ inkscape:export-xdpi="61.120499"
949+ y="100.20374"
950+ x="20.839275"
951+ height="9.7895899"
952+ width="47.889587"
953+ id="rect952"
954+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
955+ <text
956+ inkscape:export-ydpi="61.120499"
957+ inkscape:export-xdpi="61.120499"
958+ xml:space="preserve"
959+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
960+ x="22.955944"
961+ y="108.40608"
962+ id="text956"><tspan
963+ sodipodi:role="line"
964+ id="tspan954"
965+ x="22.955944"
966+ y="108.40608"
967+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332">error messages</tspan></text>
968+ <text
969+ inkscape:export-ydpi="61.120499"
970+ inkscape:export-xdpi="61.120499"
971+ xml:space="preserve"
972+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
973+ x="79.312202"
974+ y="92.266502"
975+ id="text960"><tspan
976+ sodipodi:role="line"
977+ id="tspan958"
978+ x="79.312202"
979+ y="92.266502"
980+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">module Core.CompileExpr</tspan></text>
981+ <rect
982+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
983+ id="rect962"
984+ width="61.912495"
985+ height="18.785419"
986+ x="77.724693"
987+ y="87.768333"
988+ inkscape:export-xdpi="61.120499"
989+ inkscape:export-ydpi="61.120499" />
990+ <text
991+ id="text966"
992+ y="95.970665"
993+ x="79.841362"
994+ style="font-style:normal;font-weight:normal;font-size:3.52777767px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
995+ xml:space="preserve"
996+ inkscape:export-xdpi="61.120499"
997+ inkscape:export-ydpi="61.120499"><tspan
998+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
999+ y="95.970665"
1000+ x="79.841362"
1001+ sodipodi:role="line"
1002+ id="tspan968">Representation of expressions ready</tspan><tspan
1003+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
1004+ y="100.38039"
1005+ x="79.841362"
1006+ sodipodi:role="line"
1007+ id="tspan974">for compiling: CExp</tspan><tspan
1008+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
1009+ y="104.79011"
1010+ x="79.841362"
1011+ sodipodi:role="line"
1012+ id="tspan972">Type erased, explicit case trees</tspan></text>
1013+ <text
1014+ inkscape:export-ydpi="61.120499"
1015+ inkscape:export-xdpi="61.120499"
1016+ xml:space="preserve"
1017+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
1018+ x="22.162193"
1019+ y="73.217979"
1020+ id="text978"><tspan
1021+ sodipodi:role="line"
1022+ id="tspan976"
1023+ x="22.162193"
1024+ y="73.217979"
1025+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">module Idris.CommandLine</tspan></text>
1026+ <rect
1027+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
1028+ id="rect980"
1029+ width="55.827087"
1030+ height="10.054173"
1031+ x="20.574694"
1032+ y="68.719742"
1033+ inkscape:export-xdpi="61.120499"
1034+ inkscape:export-ydpi="61.120499" />
1035+ <text
1036+ id="text984"
1037+ y="76.92215"
1038+ x="22.69136"
1039+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
1040+ xml:space="preserve"
1041+ inkscape:export-xdpi="61.120499"
1042+ inkscape:export-ydpi="61.120499"><tspan
1043+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
1044+ y="76.92215"
1045+ x="22.69136"
1046+ id="tspan982"
1047+ sodipodi:role="line">command line options</tspan></text>
1048+ <text
1049+ id="text988"
1050+ y="89.886726"
1051+ x="22.162193"
1052+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
1053+ xml:space="preserve"
1054+ inkscape:export-xdpi="61.120499"
1055+ inkscape:export-ydpi="61.120499"><tspan
1056+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332"
1057+ y="89.886726"
1058+ x="22.162193"
1059+ id="tspan986"
1060+ sodipodi:role="line">module Idris.Error</tspan></text>
1061+ <rect
1062+ inkscape:export-ydpi="61.120499"
1063+ inkscape:export-xdpi="61.120499"
1064+ y="85.388489"
1065+ x="20.574694"
1066+ height="9.5250101"
1067+ width="37.835419"
1068+ id="rect990"
1069+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
1070+ <text
1071+ inkscape:export-ydpi="61.120499"
1072+ inkscape:export-xdpi="61.120499"
1073+ xml:space="preserve"
1074+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
1075+ x="22.69136"
1076+ y="93.590897"
1077+ id="text994"><tspan
1078+ sodipodi:role="line"
1079+ id="tspan992"
1080+ x="22.69136"
1081+ y="93.590897"
1082+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332">perror</tspan></text>
1083+ <path
1084+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1000)"
1085+ d="m 66.876776,99.410007 c -0.17822,-10.50534 -0.880145,-7.9985 -7.143748,-8.99444"
1086+ id="path996"
1087+ inkscape:connector-curvature="0"
1088+ inkscape:export-xdpi="61.120499"
1089+ inkscape:export-ydpi="61.120499"
1090+ sodipodi:nodetypes="cc" />
1091+ <path
1092+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
1093+ d="M 15.081249,210.48125 H 200.02499"
1094+ id="path1201"
1095+ inkscape:connector-curvature="0"
1096+ sodipodi:nodetypes="cc"
1097+ inkscape:export-xdpi="61.120499"
1098+ inkscape:export-ydpi="61.120499" />
1099+ <path
1100+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-start:url(#Arrow1Mstart);marker-end:url(#Arrow1Mend)"
1101+ d="m 154.78125,214.97917 -0.26459,40.21666"
1102+ id="path1203"
1103+ inkscape:connector-curvature="0"
1104+ inkscape:export-xdpi="61.120499"
1105+ inkscape:export-ydpi="61.120499" />
1106+ <text
1107+ xml:space="preserve"
1108+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.40000001;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
1109+ x="158.75"
1110+ y="226.09137"
1111+ id="text1473"
1112+ inkscape:export-xdpi="61.120499"
1113+ inkscape:export-ydpi="61.120499"><tspan
1114+ sodipodi:role="line"
1115+ id="tspan1471"
1116+ x="158.75"
1117+ y="226.09137"
1118+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;">'text' modules are</tspan><tspan
1119+ sodipodi:role="line"
1120+ x="158.75"
1121+ y="230.92491"
1122+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;"
1123+ id="tspan1475">also in Idris 1</tspan><tspan
1124+ sodipodi:role="line"
1125+ x="158.75"
1126+ y="235.75845"
1127+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332;"
1128+ id="tspan1477">library.</tspan></text>
1129+ <path
1130+ inkscape:connector-curvature="0"
1131+ id="path957"
1132+ d="m 172.77292,166.03125 -0.26459,40.21666"
1133+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker969);marker-end:url(#marker973)"
1134+ inkscape:export-xdpi="61.120499"
1135+ inkscape:export-ydpi="61.120499" />
1136+ <text
1137+ inkscape:export-ydpi="61.120499"
1138+ inkscape:export-xdpi="61.120499"
1139+ id="text965"
1140+ y="177.14345"
1141+ x="176.74167"
1142+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.40000001;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
1143+ xml:space="preserve"><tspan
1144+ id="tspan963"
1145+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332;"
1146+ y="177.14345"
1147+ x="176.74167"
1148+ sodipodi:role="line">'IDEMode is for</tspan><tspan
1149+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332;"
1150+ y="181.97699"
1151+ x="176.74167"
1152+ sodipodi:role="line"
1153+ id="tspan981">communicating</tspan><tspan
1154+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332;"
1155+ y="186.81053"
1156+ x="176.74167"
1157+ sodipodi:role="line"
1158+ id="tspan984">with external</tspan><tspan
1159+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332;"
1160+ y="191.64406"
1161+ x="176.74167"
1162+ sodipodi:role="line"
1163+ id="tspan987">editors. It uses</tspan><tspan
1164+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332;"
1165+ y="196.4776"
1166+ x="176.74167"
1167+ sodipodi:role="line"
1168+ id="tspan989">SExp structure</tspan><tspan
1169+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332;"
1170+ y="201.31114"
1171+ x="176.74167"
1172+ sodipodi:role="line"
1173+ id="tspan991">which is Lisp-</tspan><tspan
1174+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;stroke-width:0.26458332;"
1175+ y="206.14468"
1176+ x="176.74167"
1177+ sodipodi:role="line"
1178+ id="tspan993">like.</tspan></text>
1179+ <path
1180+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1017);marker-end:url(#marker1021)"
1181+ d="m 172.77292,110.20417 -0.26459,40.21666"
1182+ id="path997"
1183+ inkscape:connector-curvature="0"
1184+ inkscape:export-xdpi="61.120499"
1185+ inkscape:export-ydpi="61.120499" />
1186+ <text
1187+ xml:space="preserve"
1188+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.40000001;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
1189+ x="176.21251"
1190+ y="115.76012"
1191+ id="text1013"
1192+ inkscape:export-xdpi="61.120499"
1193+ inkscape:export-ydpi="61.120499"><tspan
1194+ id="tspan1011"
1195+ sodipodi:role="line"
1196+ x="176.21251"
1197+ y="115.76012"
1198+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332">Idris.Parser</tspan><tspan
1199+ sodipodi:role="line"
1200+ x="176.21251"
1201+ y="120.59366"
1202+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
1203+ id="tspan1050">reads from a</tspan><tspan
1204+ sodipodi:role="line"
1205+ x="176.21251"
1206+ y="125.42719"
1207+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
1208+ id="tspan1052">file and outputs</tspan><tspan
1209+ sodipodi:role="line"
1210+ x="176.21251"
1211+ y="130.26073"
1212+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
1213+ id="tspan1054">to a PTerm</tspan><tspan
1214+ sodipodi:role="line"
1215+ x="176.21251"
1216+ y="135.09427"
1217+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;stroke-width:0.26458332"
1218+ id="tspan1056">structure.</tspan></text>
1219+ <path
1220+ inkscape:connector-curvature="0"
1221+ id="path1058"
1222+ d="m 171.97917,51.731253 -0.26459,19.57916"
1223+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1074);marker-end:url(#marker1078)"
1224+ sodipodi:nodetypes="cc"
1225+ inkscape:export-xdpi="61.120499"
1226+ inkscape:export-ydpi="61.120499" />
1227+ <text
1228+ inkscape:export-ydpi="61.120499"
1229+ inkscape:export-xdpi="61.120499"
1230+ id="text1070"
1231+ y="57.287201"
1232+ x="175.41876"
1233+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.40000001;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#800080;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
1234+ xml:space="preserve"><tspan
1235+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#800080;stroke-width:0.26458332;"
1236+ y="57.287201"
1237+ x="175.41876"
1238+ sodipodi:role="line"
1239+ id="tspan1060">Idris.Parser</tspan><tspan
1240+ id="tspan1068"
1241+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#800080;stroke-width:0.26458332;"
1242+ y="62.120739"
1243+ x="175.41876"
1244+ sodipodi:role="line">reads from the</tspan><tspan
1245+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:0.40000001;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#800080;stroke-width:0.26458332;"
1246+ y="66.954277"
1247+ x="175.41876"
1248+ sodipodi:role="line"
1249+ id="tspan1089">command line.</tspan></text>
1250+ </g>
1251+</svg>
docs/image/parserTopLevel.pngnew file

Binary file not shown.

docs/image/parserTopLevel.svgnew file+294
@@ -0,0 +1,294 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 210 297"
15+ version="1.1"
16+ id="svg8"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="topLevel.svg">
19+ <defs
20+ id="defs2">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker3617"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow1Mend">
29+ <path
30+ transform="scale(0.4) rotate(180) translate(10,0)"
31+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
32+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
33+ id="path3615" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow1Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="marker2891"
41+ style="overflow:visible;"
42+ inkscape:isstock="true"
43+ inkscape:collect="always">
44+ <path
45+ id="path2889"
46+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
47+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
48+ transform="scale(0.4) rotate(180) translate(10,0)" />
49+ </marker>
50+ <marker
51+ inkscape:stockid="Arrow1Mend"
52+ orient="auto"
53+ refY="0.0"
54+ refX="0.0"
55+ id="marker2049"
56+ style="overflow:visible;"
57+ inkscape:isstock="true">
58+ <path
59+ id="path2047"
60+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
61+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
62+ transform="scale(0.4) rotate(180) translate(10,0)" />
63+ </marker>
64+ <marker
65+ inkscape:isstock="true"
66+ style="overflow:visible;"
67+ id="marker1539"
68+ refX="0.0"
69+ refY="0.0"
70+ orient="auto"
71+ inkscape:stockid="Arrow1Mend"
72+ inkscape:collect="always">
73+ <path
74+ transform="scale(0.4) rotate(180) translate(10,0)"
75+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
76+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
77+ id="path1537" />
78+ </marker>
79+ <marker
80+ inkscape:stockid="Arrow1Mend"
81+ orient="auto"
82+ refY="0.0"
83+ refX="0.0"
84+ id="Arrow1Mend"
85+ style="overflow:visible;"
86+ inkscape:isstock="true"
87+ inkscape:collect="always">
88+ <path
89+ id="path830"
90+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
91+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
92+ transform="scale(0.4) rotate(180) translate(10,0)" />
93+ </marker>
94+ </defs>
95+ <sodipodi:namedview
96+ id="base"
97+ pagecolor="#ffffff"
98+ bordercolor="#666666"
99+ borderopacity="1.0"
100+ inkscape:pageopacity="0.0"
101+ inkscape:pageshadow="2"
102+ inkscape:zoom="1"
103+ inkscape:cx="396.85039"
104+ inkscape:cy="560"
105+ inkscape:document-units="mm"
106+ inkscape:current-layer="layer1"
107+ showgrid="false"
108+ inkscape:window-width="1920"
109+ inkscape:window-height="1015"
110+ inkscape:window-x="0"
111+ inkscape:window-y="0"
112+ inkscape:window-maximized="1" />
113+ <metadata
114+ id="metadata5">
115+ <rdf:RDF>
116+ <cc:Work
117+ rdf:about="">
118+ <dc:format>image/svg+xml</dc:format>
119+ <dc:type
120+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
121+ <dc:title />
122+ </cc:Work>
123+ </rdf:RDF>
124+ </metadata>
125+ <g
126+ inkscape:label="Layer 1"
127+ inkscape:groupmode="layer"
128+ id="layer1">
129+ <rect
130+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
131+ id="rect815"
132+ width="35.983334"
133+ height="18.25625"
134+ x="37.306248"
135+ y="79.512497"
136+ inkscape:export-xdpi="61.120499"
137+ inkscape:export-ydpi="61.120499" />
138+ <rect
139+ y="79.512497"
140+ x="92.339577"
141+ height="18.25625"
142+ width="35.983334"
143+ id="rect817"
144+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
145+ inkscape:export-xdpi="61.120499"
146+ inkscape:export-ydpi="61.120499" />
147+ <path
148+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
149+ d="m 73.554166,88.508337 16.66875,-0.26459"
150+ id="path819"
151+ inkscape:connector-curvature="0"
152+ inkscape:export-xdpi="61.120499"
153+ inkscape:export-ydpi="61.120499" />
154+ <path
155+ inkscape:connector-curvature="0"
156+ id="path1535"
157+ d="m 18.785416,88.77292 16.66875,-0.26459"
158+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1539)"
159+ inkscape:export-xdpi="61.120499"
160+ inkscape:export-ydpi="61.120499" />
161+ <path
162+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2049)"
163+ d="m 128.32291,88.243753 16.66875,-0.26459"
164+ id="path2045"
165+ inkscape:connector-curvature="0"
166+ inkscape:export-xdpi="61.120499"
167+ inkscape:export-ydpi="61.120499" />
168+ <text
169+ xml:space="preserve"
170+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
171+ x="20.372915"
172+ y="85.597931"
173+ id="text2857"
174+ inkscape:export-xdpi="61.120499"
175+ inkscape:export-ydpi="61.120499"><tspan
176+ sodipodi:role="line"
177+ id="tspan2855"
178+ x="20.372915"
179+ y="85.597931"
180+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332">String</tspan></text>
181+ <text
182+ id="text2861"
183+ y="80.835434"
184+ x="76.199997"
185+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
186+ xml:space="preserve"
187+ inkscape:export-xdpi="61.120499"
188+ inkscape:export-ydpi="61.120499"><tspan
189+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
190+ y="80.835434"
191+ x="76.199997"
192+ sodipodi:role="line"
193+ id="tspan2867">List</tspan><tspan
194+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
195+ y="86.127098"
196+ x="76.199997"
197+ sodipodi:role="line"
198+ id="tspan2871">Token</tspan></text>
199+ <text
200+ xml:space="preserve"
201+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
202+ x="130.96875"
203+ y="85.068764"
204+ id="text2865"
205+ inkscape:export-xdpi="61.120499"
206+ inkscape:export-ydpi="61.120499"><tspan
207+ sodipodi:role="line"
208+ id="tspan2863"
209+ x="130.96875"
210+ y="85.068764"
211+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332">PTerm</tspan></text>
212+ <text
213+ id="text2875"
214+ y="89.302101"
215+ x="47.360416"
216+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
217+ xml:space="preserve"
218+ inkscape:export-xdpi="61.120499"
219+ inkscape:export-ydpi="61.120499"><tspan
220+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332;fill:#0000ff;"
221+ y="89.302101"
222+ x="47.360416"
223+ id="tspan2873"
224+ sodipodi:role="line">Lexer</tspan></text>
225+ <text
226+ xml:space="preserve"
227+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
228+ x="100.27708"
229+ y="89.037521"
230+ id="text2879"
231+ inkscape:export-xdpi="61.120499"
232+ inkscape:export-ydpi="61.120499"><tspan
233+ sodipodi:role="line"
234+ id="tspan2877"
235+ x="100.27708"
236+ y="89.037521"
237+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">Parser</tspan></text>
238+ <path
239+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2891)"
240+ d="m 52.916666,71.575003 v 7.67291"
241+ id="path2887"
242+ inkscape:connector-curvature="0"
243+ sodipodi:nodetypes="cc"
244+ inkscape:export-xdpi="61.120499"
245+ inkscape:export-ydpi="61.120499" />
246+ <path
247+ sodipodi:nodetypes="cc"
248+ inkscape:connector-curvature="0"
249+ id="path3613"
250+ d="m 108.74375,71.575003 v 7.67291"
251+ style="fill:none;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker3617)"
252+ inkscape:export-xdpi="61.120499"
253+ inkscape:export-ydpi="61.120499" />
254+ <text
255+ id="text4173"
256+ y="69.987518"
257+ x="43.391666"
258+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
259+ xml:space="preserve"
260+ inkscape:export-xdpi="61.120499"
261+ inkscape:export-ydpi="61.120499"><tspan
262+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
263+ y="69.987518"
264+ x="43.391666"
265+ id="tspan4171"
266+ sodipodi:role="line">Recogniser</tspan></text>
267+ <text
268+ xml:space="preserve"
269+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
270+ x="97.102081"
271+ y="69.722939"
272+ id="text4177"
273+ inkscape:export-xdpi="61.120499"
274+ inkscape:export-ydpi="61.120499"><tspan
275+ sodipodi:role="line"
276+ id="tspan4175"
277+ x="97.102081"
278+ y="69.722939"
279+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332">Grammar</tspan></text>
280+ <text
281+ inkscape:export-ydpi="61.120499"
282+ inkscape:export-xdpi="61.120499"
283+ id="text854"
284+ y="93.800011"
285+ x="131.23334"
286+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
287+ xml:space="preserve"><tspan
288+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
289+ y="103.5316"
290+ x="131.23334"
291+ id="tspan852"
292+ sodipodi:role="line" /></text>
293+ </g>
294+</svg>
docs/image/plusReducesProof.pngnew file

Binary file not shown.

docs/image/plusReducesProof.svgnew file+339
@@ -0,0 +1,339 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.91 r13725"
18+ sodipodi:docname="plusReducesProof.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:stockid="Arrow1Mend"
23+ orient="auto"
24+ refY="0.0"
25+ refX="0.0"
26+ id="marker6540"
27+ style="overflow:visible;"
28+ inkscape:isstock="true">
29+ <path
30+ id="path6542"
31+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
32+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
33+ transform="scale(0.4) rotate(180) translate(10,0)" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow1Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="marker5748"
41+ style="overflow:visible;"
42+ inkscape:isstock="true">
43+ <path
44+ id="path5750"
45+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
46+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
47+ transform="scale(0.4) rotate(180) translate(10,0)" />
48+ </marker>
49+ <marker
50+ inkscape:isstock="true"
51+ style="overflow:visible;"
52+ id="marker5154"
53+ refX="0.0"
54+ refY="0.0"
55+ orient="auto"
56+ inkscape:stockid="Arrow1Mend"
57+ inkscape:collect="always">
58+ <path
59+ transform="scale(0.4) rotate(180) translate(10,0)"
60+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
61+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
62+ id="path5156" />
63+ </marker>
64+ <marker
65+ inkscape:stockid="Arrow1Mend"
66+ orient="auto"
67+ refY="0.0"
68+ refX="0.0"
69+ id="Arrow1Mend"
70+ style="overflow:visible;"
71+ inkscape:isstock="true"
72+ inkscape:collect="always">
73+ <path
74+ id="path4189"
75+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
76+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
77+ transform="scale(0.4) rotate(180) translate(10,0)" />
78+ </marker>
79+ </defs>
80+ <sodipodi:namedview
81+ id="base"
82+ pagecolor="#ffffff"
83+ bordercolor="#666666"
84+ borderopacity="1.0"
85+ inkscape:pageopacity="0.0"
86+ inkscape:pageshadow="2"
87+ inkscape:zoom="1"
88+ inkscape:cx="397.18872"
89+ inkscape:cy="520"
90+ inkscape:document-units="px"
91+ inkscape:current-layer="layer1"
92+ showgrid="false"
93+ inkscape:window-width="1110"
94+ inkscape:window-height="1011"
95+ inkscape:window-x="-4"
96+ inkscape:window-y="0"
97+ inkscape:window-maximized="0" />
98+ <metadata
99+ id="metadata7">
100+ <rdf:RDF>
101+ <cc:Work
102+ rdf:about="">
103+ <dc:format>image/svg+xml</dc:format>
104+ <dc:type
105+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
106+ <dc:title></dc:title>
107+ </cc:Work>
108+ </rdf:RDF>
109+ </metadata>
110+ <g
111+ inkscape:label="Layer 1"
112+ inkscape:groupmode="layer"
113+ id="layer1">
114+ <text
115+ xml:space="preserve"
116+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
117+ x="266"
118+ y="225.36221"
119+ id="text4136"
120+ sodipodi:linespacing="125%"><tspan
121+ sodipodi:role="line"
122+ id="tspan4138"
123+ x="266"
124+ y="225.36221">assumptions</tspan><tspan
125+ sodipodi:role="line"
126+ x="266"
127+ y="250.36221"
128+ id="tspan4140">(context)</tspan></text>
129+ <text
130+ sodipodi:linespacing="125%"
131+ id="text4142"
132+ y="238.36221"
133+ x="526"
134+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
135+ xml:space="preserve"><tspan
136+ id="tspan4146"
137+ y="238.36221"
138+ x="526"
139+ sodipodi:role="line">goal</tspan></text>
140+ <text
141+ xml:space="preserve"
142+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
143+ x="420"
144+ y="289.36221"
145+ id="text4150"
146+ sodipodi:linespacing="125%"><tspan
147+ sodipodi:role="line"
148+ x="420"
149+ y="289.36221"
150+ id="tspan4152">(k : Nat) -&gt; (k = plus k 0) -&gt; S k = S (plus k 0)</tspan></text>
151+ <path
152+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
153+ d="m 241,262.3622 428,-1"
154+ id="path4154"
155+ inkscape:connector-curvature="0" />
156+ <path
157+ inkscape:connector-curvature="0"
158+ id="path4160"
159+ d="m 241,308.3622 428,-1"
160+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
161+ <text
162+ sodipodi:linespacing="125%"
163+ id="text4162"
164+ y="312.36221"
165+ x="175"
166+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
167+ xml:space="preserve"><tspan
168+ id="tspan4164"
169+ y="312.36221"
170+ x="175"
171+ sodipodi:role="line">intro `{{k}}</tspan></text>
172+ <text
173+ sodipodi:linespacing="125%"
174+ id="text4166"
175+ y="333.36221"
176+ x="482"
177+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
178+ xml:space="preserve"><tspan
179+ id="tspan4168"
180+ y="333.36221"
181+ x="482"
182+ sodipodi:role="line">(k = plus k 0) -&gt; S k = S (plus k 0)</tspan></text>
183+ <text
184+ xml:space="preserve"
185+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
186+ x="324"
187+ y="334.36221"
188+ id="text4170"
189+ sodipodi:linespacing="125%"><tspan
190+ sodipodi:role="line"
191+ x="324"
192+ y="334.36221"
193+ id="tspan4172">k : Nat</tspan></text>
194+ <path
195+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
196+ d="m 441,294.3622 -73,30"
197+ id="path4174"
198+ inkscape:connector-curvature="0"
199+ sodipodi:nodetypes="cc" />
200+ <path
201+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
202+ d="m 241,352.3622 428,-1"
203+ id="path5134"
204+ inkscape:connector-curvature="0" />
205+ <text
206+ xml:space="preserve"
207+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
208+ x="171"
209+ y="355.36221"
210+ id="text5136"
211+ sodipodi:linespacing="125%"><tspan
212+ sodipodi:role="line"
213+ x="171"
214+ y="355.36221"
215+ id="tspan5138">intro `{{ih}}</tspan></text>
216+ <text
217+ xml:space="preserve"
218+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
219+ x="570"
220+ y="372.36221"
221+ id="text5140"
222+ sodipodi:linespacing="125%"><tspan
223+ sodipodi:role="line"
224+ x="570"
225+ y="372.36221"
226+ id="tspan5142">S k = S (plus k 0)</tspan></text>
227+ <text
228+ sodipodi:linespacing="125%"
229+ id="text5144"
230+ y="378.36221"
231+ x="324"
232+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
233+ xml:space="preserve"><tspan
234+ id="tspan5146"
235+ y="378.36221"
236+ x="324"
237+ sodipodi:role="line">k : Nat</tspan></text>
238+ <text
239+ sodipodi:linespacing="125%"
240+ id="text5150"
241+ y="393.36221"
242+ x="323"
243+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
244+ xml:space="preserve"><tspan
245+ id="tspan5152"
246+ y="393.36221"
247+ x="323"
248+ sodipodi:role="line">ih : k = plus k 0</tspan></text>
249+ <path
250+ inkscape:connector-curvature="0"
251+ id="path5728"
252+ d="m 242,404.3622 428,-1"
253+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
254+ <text
255+ sodipodi:linespacing="125%"
256+ id="text5730"
257+ y="408.36221"
258+ x="109"
259+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
260+ xml:space="preserve"><tspan
261+ id="tspan5732"
262+ y="408.36221"
263+ x="109"
264+ sodipodi:role="line">rewriteWith (Var `{{ih}})</tspan></text>
265+ <text
266+ sodipodi:linespacing="125%"
267+ id="text5734"
268+ y="424.36221"
269+ x="587"
270+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
271+ xml:space="preserve"><tspan
272+ id="tspan5736"
273+ y="424.36221"
274+ x="587"
275+ sodipodi:role="line">S k = S k </tspan></text>
276+ <text
277+ xml:space="preserve"
278+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
279+ x="325"
280+ y="430.36221"
281+ id="text5738"
282+ sodipodi:linespacing="125%"><tspan
283+ sodipodi:role="line"
284+ x="325"
285+ y="430.36221"
286+ id="tspan5740">k : Nat</tspan></text>
287+ <path
288+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5748)"
289+ d="m 610,379.3622 1,29"
290+ id="path5742"
291+ inkscape:connector-curvature="0"
292+ sodipodi:nodetypes="cc" />
293+ <text
294+ xml:space="preserve"
295+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
296+ x="324"
297+ y="445.36221"
298+ id="text5744"
299+ sodipodi:linespacing="125%"><tspan
300+ sodipodi:role="line"
301+ x="324"
302+ y="445.36221"
303+ id="tspan5746">ih : k = plus k 0</tspan></text>
304+ <path
305+ inkscape:connector-curvature="0"
306+ id="path7294"
307+ d="m 418,460.3622 -2,-199"
308+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
309+ sodipodi:nodetypes="cc" />
310+ <path
311+ sodipodi:nodetypes="cc"
312+ inkscape:connector-curvature="0"
313+ id="path5148"
314+ d="m 519,339.3622 -107,44"
315+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5154)" />
316+ <path
317+ style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:12, 2;stroke-dashoffset:0;stroke-opacity:1"
318+ d="m 609,391.3622 -197,49"
319+ id="path6538"
320+ inkscape:connector-curvature="0"
321+ sodipodi:nodetypes="cc" />
322+ <path
323+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
324+ d="m 242,458.3622 428,-1"
325+ id="path7308"
326+ inkscape:connector-curvature="0" />
327+ <text
328+ xml:space="preserve"
329+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
330+ x="177"
331+ y="462.36221"
332+ id="text7310"
333+ sodipodi:linespacing="125%"><tspan
334+ sodipodi:role="line"
335+ x="177"
336+ y="462.36221"
337+ id="tspan7312">reflexivity</tspan></text>
338+ </g>
339+</svg>
docs/image/recogniser.pngnew file

Binary file not shown.

docs/image/recogniser.svgnew file+477
@@ -0,0 +1,477 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 210 297"
15+ version="1.1"
16+ id="svg8"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="recogniser.svg">
19+ <defs
20+ id="defs2" />
21+ <sodipodi:namedview
22+ id="base"
23+ pagecolor="#ffffff"
24+ bordercolor="#666666"
25+ borderopacity="1.0"
26+ inkscape:pageopacity="0.0"
27+ inkscape:pageshadow="2"
28+ inkscape:zoom="1"
29+ inkscape:cx="384.45994"
30+ inkscape:cy="560"
31+ inkscape:document-units="mm"
32+ inkscape:current-layer="layer1"
33+ showgrid="false"
34+ inkscape:window-width="1920"
35+ inkscape:window-height="1015"
36+ inkscape:window-x="0"
37+ inkscape:window-y="0"
38+ inkscape:window-maximized="1" />
39+ <metadata
40+ id="metadata5">
41+ <rdf:RDF>
42+ <cc:Work
43+ rdf:about="">
44+ <dc:format>image/svg+xml</dc:format>
45+ <dc:type
46+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
47+ <dc:title />
48+ </cc:Work>
49+ </rdf:RDF>
50+ </metadata>
51+ <g
52+ inkscape:label="Layer 1"
53+ inkscape:groupmode="layer"
54+ id="layer1">
55+ <rect
56+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70599997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
57+ id="rect815"
58+ width="112.44793"
59+ height="77.258354"
60+ x="6.3499999"
61+ y="63.108334"
62+ ry="3.96875"
63+ inkscape:export-xdpi="61.120499"
64+ inkscape:export-ydpi="61.120499" />
65+ <text
66+ xml:space="preserve"
67+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444447px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
68+ x="11.112496"
69+ y="68.399994"
70+ id="text819"
71+ inkscape:export-xdpi="61.120499"
72+ inkscape:export-ydpi="61.120499"><tspan
73+ sodipodi:role="line"
74+ id="tspan817"
75+ x="11.112496"
76+ y="68.399994"
77+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444447px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">Text.Lexer.Core</tspan></text>
78+ <text
79+ id="text823"
80+ y="74.749992"
81+ x="8.7312441"
82+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
83+ xml:space="preserve"
84+ inkscape:export-xdpi="61.120499"
85+ inkscape:export-ydpi="61.120499"><tspan
86+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
87+ y="74.749992"
88+ x="8.7312441"
89+ id="tspan821"
90+ sodipodi:role="line">data Recognise : (consumes : Bool) -&gt; Type where</tspan><tspan
91+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
92+ y="80.041656"
93+ x="8.7312441"
94+ sodipodi:role="line"
95+ id="tspan825"> Empty : Recognise False</tspan><tspan
96+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
97+ y="85.333328"
98+ x="8.7312441"
99+ sodipodi:role="line"
100+ id="tspan827"> Fail : Recognise c</tspan><tspan
101+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
102+ y="90.624992"
103+ x="8.7312441"
104+ sodipodi:role="line"
105+ id="tspan829"> Lookahead : (positive : Bool) -&gt; Recognise c -&gt; Recognise False</tspan><tspan
106+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
107+ y="95.916656"
108+ x="8.7312441"
109+ sodipodi:role="line"
110+ id="tspan831"> Pred : (Char -&gt; Bool) -&gt; Recognise True</tspan><tspan
111+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
112+ y="101.20832"
113+ x="8.7312441"
114+ sodipodi:role="line"
115+ id="tspan835"> SeqEat : Recognise True -&gt; Inf (Recognise e) -&gt; Recognise True</tspan><tspan
116+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
117+ y="106.49999"
118+ x="8.7312441"
119+ sodipodi:role="line"
120+ id="tspan837"> SeqEmpty : Recognise e1 -&gt; Recognise e2 -&gt; Recognise (e1 || e2)</tspan><tspan
121+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
122+ y="111.79166"
123+ x="8.7312441"
124+ sodipodi:role="line"
125+ id="tspan839"> Alt : Recognise e1 -&gt; Recognise e2 -&gt; Recognise (e1 &amp;&amp; e2)</tspan><tspan
126+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
127+ y="117.08332"
128+ x="8.7312441"
129+ sodipodi:role="line"
130+ id="tspan841" /><tspan
131+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
132+ y="122.37499"
133+ x="8.7312441"
134+ sodipodi:role="line"
135+ id="tspan843">||| A token recogniser. Guaranteed to consume at least one character.</tspan><tspan
136+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
137+ y="127.66666"
138+ x="8.7312441"
139+ sodipodi:role="line"
140+ id="tspan845">public export</tspan><tspan
141+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
142+ y="132.95833"
143+ x="8.7312441"
144+ sodipodi:role="line"
145+ id="tspan847">Lexer : Type</tspan><tspan
146+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
147+ y="138.24998"
148+ x="8.7312441"
149+ sodipodi:role="line"
150+ id="tspan849">Lexer = Recognise True</tspan><tspan
151+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
152+ y="143.54166"
153+ x="8.7312441"
154+ sodipodi:role="line"
155+ id="tspan851" /></text>
156+ <rect
157+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
158+ id="rect850"
159+ width="111.65417"
160+ height="10.318749"
161+ x="9.7895756"
162+ y="97.504166"
163+ inkscape:export-xdpi="61.120499"
164+ inkscape:export-ydpi="61.120499" />
165+ <rect
166+ y="97.504166"
167+ x="9.7895756"
168+ height="15.610415"
169+ width="111.38958"
170+ id="rect852"
171+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
172+ inkscape:export-xdpi="61.120499"
173+ inkscape:export-ydpi="61.120499" />
174+ <text
175+ inkscape:export-ydpi="61.120499"
176+ inkscape:export-xdpi="61.120499"
177+ id="text870"
178+ y="98.297905"
179+ x="129.64584"
180+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
181+ xml:space="preserve"><tspan
182+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
183+ y="98.297905"
184+ x="129.64584"
185+ sodipodi:role="line"
186+ id="tspan908">(&lt;+&gt;) : Recognise c1 -&gt; inf c1 (Recognise c2) -&gt; </tspan><tspan
187+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
188+ y="103.58957"
189+ x="129.64584"
190+ sodipodi:role="line"
191+ id="tspan929"> Recognise (c1 || c2)</tspan><tspan
192+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
193+ y="108.88124"
194+ x="129.64584"
195+ sodipodi:role="line"
196+ id="tspan916">Sequence two recognisers. If either consumes a</tspan><tspan
197+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
198+ y="114.1729"
199+ x="129.64584"
200+ sodipodi:role="line"
201+ id="tspan918">character, the sequence is guaranteed to</tspan><tspan
202+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
203+ y="119.46457"
204+ x="129.64584"
205+ sodipodi:role="line"
206+ id="tspan935">consume a character</tspan><tspan
207+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
208+ y="124.75623"
209+ x="129.64584"
210+ sodipodi:role="line"
211+ id="tspan912" /><tspan
212+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
213+ y="130.04791"
214+ x="129.64584"
215+ sodipodi:role="line"
216+ id="tspan868" /></text>
217+ <path
218+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
219+ d="m 129.38124,100.41458 -7.9375,-2.910414"
220+ id="path937"
221+ inkscape:connector-curvature="0"
222+ sodipodi:nodetypes="cc"
223+ inkscape:export-xdpi="61.120499"
224+ inkscape:export-ydpi="61.120499" />
225+ <text
226+ xml:space="preserve"
227+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
228+ x="130.175"
229+ y="129.25418"
230+ id="text953"
231+ inkscape:export-xdpi="61.120499"
232+ inkscape:export-ydpi="61.120499"><tspan
233+ sodipodi:role="line"
234+ x="130.175"
235+ y="129.25418"
236+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
237+ id="tspan973">(&lt;|&gt;) : Recognise c1 -&gt; Recognise c2 -&gt;</tspan><tspan
238+ sodipodi:role="line"
239+ x="130.175"
240+ y="134.54584"
241+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
242+ id="tspan975"> Recognise (c1 &amp;&amp; c2)</tspan><tspan
243+ sodipodi:role="line"
244+ x="130.175"
245+ y="139.83751"
246+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
247+ id="tspan983">Alternative recognisers. If both consume, the</tspan><tspan
248+ sodipodi:role="line"
249+ x="130.175"
250+ y="145.12917"
251+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
252+ id="tspan985">combination is guaranteed to consumer a</tspan><tspan
253+ sodipodi:role="line"
254+ x="130.175"
255+ y="150.42084"
256+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
257+ id="tspan992">character.</tspan><tspan
258+ sodipodi:role="line"
259+ x="130.175"
260+ y="155.71251"
261+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
262+ id="tspan977" /><tspan
263+ id="tspan949"
264+ sodipodi:role="line"
265+ x="130.175"
266+ y="161.00417"
267+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /><tspan
268+ id="tspan951"
269+ sodipodi:role="line"
270+ x="130.175"
271+ y="166.29584"
272+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /></text>
273+ <path
274+ inkscape:connector-curvature="0"
275+ id="path996"
276+ d="M 128.05833,126.87292 110.33125,110.46875"
277+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
278+ sodipodi:nodetypes="cc"
279+ inkscape:export-xdpi="61.120499"
280+ inkscape:export-ydpi="61.120499" />
281+ <text
282+ xml:space="preserve"
283+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
284+ x="28.045837"
285+ y="51.731236"
286+ id="text1012"
287+ inkscape:export-xdpi="61.120499"
288+ inkscape:export-ydpi="61.120499"><tspan
289+ id="tspan1006"
290+ sodipodi:role="line"
291+ x="28.045837"
292+ y="51.731236"
293+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332">empty : Recognise False</tspan><tspan
294+ sodipodi:role="line"
295+ x="28.045837"
296+ y="57.022903"
297+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
298+ id="tspan1087">Recognise no input (doesn't consume any input)</tspan><tspan
299+ id="tspan1008"
300+ sodipodi:role="line"
301+ x="28.045837"
302+ y="62.314568"
303+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /><tspan
304+ id="tspan1010"
305+ sodipodi:role="line"
306+ x="28.045837"
307+ y="67.606232"
308+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /></text>
309+ <text
310+ inkscape:export-ydpi="61.120499"
311+ inkscape:export-xdpi="61.120499"
312+ id="text1031"
313+ y="49.614574"
314+ x="114.56458"
315+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
316+ xml:space="preserve"><tspan
317+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
318+ y="49.614574"
319+ x="114.56458"
320+ sodipodi:role="line"
321+ id="tspan1025">fail : Recognise c</tspan><tspan
322+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
323+ y="54.906242"
324+ x="114.56458"
325+ sodipodi:role="line"
326+ id="tspan1089">A recogniser that always fails.</tspan><tspan
327+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
328+ y="60.197906"
329+ x="114.56458"
330+ sodipodi:role="line"
331+ id="tspan1027" /><tspan
332+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
333+ y="65.489571"
334+ x="114.56458"
335+ sodipodi:role="line"
336+ id="tspan1029" /></text>
337+ <text
338+ inkscape:export-ydpi="61.120499"
339+ inkscape:export-xdpi="61.120499"
340+ id="text1039"
341+ y="61.785423"
342+ x="128.32292"
343+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
344+ xml:space="preserve"><tspan
345+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
346+ y="61.785423"
347+ x="128.32292"
348+ sodipodi:role="line"
349+ id="tspan1051">expect : Recognise c -&gt; Recognise False</tspan><tspan
350+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
351+ y="67.077087"
352+ x="128.32292"
353+ sodipodi:role="line"
354+ id="tspan1059">Positive lookahead. Never consumes input.</tspan><tspan
355+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
356+ y="72.368759"
357+ x="128.32292"
358+ sodipodi:role="line"
359+ id="tspan1035" /><tspan
360+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
361+ y="77.660423"
362+ x="128.32292"
363+ sodipodi:role="line"
364+ id="tspan1037" /></text>
365+ <text
366+ xml:space="preserve"
367+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
368+ x="125.14791"
369+ y="86.39167"
370+ id="text1047"
371+ inkscape:export-xdpi="61.120499"
372+ inkscape:export-ydpi="61.120499"><tspan
373+ id="tspan1041"
374+ sodipodi:role="line"
375+ x="125.14791"
376+ y="86.39167"
377+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332">pred : (Char -&gt; Bool) -&gt; Lexer</tspan><tspan
378+ sodipodi:role="line"
379+ x="125.14791"
380+ y="91.683334"
381+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
382+ id="tspan1085">Recognise a character that matches a predicate</tspan><tspan
383+ id="tspan1043"
384+ sodipodi:role="line"
385+ x="125.14791"
386+ y="96.975006"
387+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /><tspan
388+ id="tspan1045"
389+ sodipodi:role="line"
390+ x="125.14791"
391+ y="102.26667"
392+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /></text>
393+ <rect
394+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
395+ id="rect1053"
396+ width="79.904167"
397+ height="23.283327"
398+ x="121.70833"
399+ y="57.816666"
400+ inkscape:export-xdpi="61.120499"
401+ inkscape:export-ydpi="61.120499" />
402+ <text
403+ xml:space="preserve"
404+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
405+ x="128.32291"
406+ y="72.897926"
407+ id="text1069"
408+ inkscape:export-xdpi="61.120499"
409+ inkscape:export-ydpi="61.120499"><tspan
410+ id="tspan1063"
411+ sodipodi:role="line"
412+ x="128.32291"
413+ y="72.897926"
414+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332">reject : Recognise c -&gt; Recognise False</tspan><tspan
415+ sodipodi:role="line"
416+ x="128.32291"
417+ y="78.18959"
418+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
419+ id="tspan1073">Negative lookahead. Never consumes input.</tspan><tspan
420+ sodipodi:role="line"
421+ x="128.32291"
422+ y="83.481262"
423+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
424+ id="tspan1075" /><tspan
425+ id="tspan1065"
426+ sodipodi:role="line"
427+ x="128.32291"
428+ y="88.772926"
429+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /><tspan
430+ id="tspan1067"
431+ sodipodi:role="line"
432+ x="128.32291"
433+ y="94.06459"
434+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332" /></text>
435+ <path
436+ sodipodi:nodetypes="cc"
437+ inkscape:connector-curvature="0"
438+ id="path1081"
439+ d="M 124.35416,89.83125 76.99375,94.858333"
440+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
441+ inkscape:export-xdpi="61.120499"
442+ inkscape:export-ydpi="61.120499" />
443+ <path
444+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
445+ d="M 123.82499,66.01875 112.97708,86.391666"
446+ id="path1083"
447+ inkscape:connector-curvature="0"
448+ sodipodi:nodetypes="cc"
449+ inkscape:export-xdpi="61.120499"
450+ inkscape:export-ydpi="61.120499" />
451+ <path
452+ sodipodi:nodetypes="cc"
453+ inkscape:connector-curvature="0"
454+ id="path1091"
455+ d="M 33.33749,59.139583 20.90208,76.337499"
456+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
457+ inkscape:export-xdpi="61.120499"
458+ inkscape:export-ydpi="61.120499" />
459+ <path
460+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
461+ d="M 113.77082,51.73125 42.068747,83.481249"
462+ id="path1093"
463+ inkscape:connector-curvature="0"
464+ sodipodi:nodetypes="cc"
465+ inkscape:export-xdpi="61.120499"
466+ inkscape:export-ydpi="61.120499" />
467+ <rect
468+ y="94.064583"
469+ x="129.64583"
470+ height="27.51667"
471+ width="78.316658"
472+ id="rect899"
473+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
474+ inkscape:export-xdpi="61.120499"
475+ inkscape:export-ydpi="61.120499" />
476+ </g>
477+</svg>
docs/image/solve.pngnew file

Binary file not shown.

docs/image/solve.svgnew file+163
@@ -0,0 +1,163 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 210 297"
15+ version="1.1"
16+ id="svg8"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="solve.svg">
19+ <defs
20+ id="defs2">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker838"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow1Mend">
29+ <path
30+ transform="scale(0.4) rotate(180) translate(10,0)"
31+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
32+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
33+ id="path836" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow1Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="Arrow1Mend"
41+ style="overflow:visible;"
42+ inkscape:isstock="true"
43+ inkscape:collect="always">
44+ <path
45+ id="path4529"
46+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
47+ style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1"
48+ transform="scale(0.4) rotate(180) translate(10,0)" />
49+ </marker>
50+ </defs>
51+ <sodipodi:namedview
52+ id="base"
53+ pagecolor="#ffffff"
54+ bordercolor="#666666"
55+ borderopacity="1.0"
56+ inkscape:pageopacity="0.0"
57+ inkscape:pageshadow="2"
58+ inkscape:zoom="1"
59+ inkscape:cx="313.5"
60+ inkscape:cy="696.5"
61+ inkscape:document-units="mm"
62+ inkscape:current-layer="layer1"
63+ showgrid="false"
64+ inkscape:window-width="1920"
65+ inkscape:window-height="1015"
66+ inkscape:window-x="0"
67+ inkscape:window-y="0"
68+ inkscape:window-maximized="1" />
69+ <metadata
70+ id="metadata5">
71+ <rdf:RDF>
72+ <cc:Work
73+ rdf:about="">
74+ <dc:format>image/svg+xml</dc:format>
75+ <dc:type
76+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
77+ <dc:title />
78+ </cc:Work>
79+ </rdf:RDF>
80+ </metadata>
81+ <g
82+ inkscape:label="Layer 1"
83+ inkscape:groupmode="layer"
84+ id="layer1">
85+ <rect
86+ style="fill:#ffff00;fill-opacity:1;stroke-width:0.26458332"
87+ id="rect22"
88+ width="31.75"
89+ height="5.5562501"
90+ x="70.114571"
91+ y="114.96667"
92+ inkscape:export-xdpi="61.120499"
93+ inkscape:export-ydpi="61.120499" />
94+ <text
95+ id="text16"
96+ y="118.67083"
97+ x="72.231262"
98+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
99+ xml:space="preserve"
100+ inkscape:export-xdpi="61.120499"
101+ inkscape:export-ydpi="61.120499"><tspan
102+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332"
103+ y="118.67083"
104+ x="72.231262"
105+ id="tspan14"
106+ sodipodi:role="line">Prelude.Nat.Z </tspan></text>
107+ <text
108+ id="text20"
109+ y="110.99791"
110+ x="82.814583"
111+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
112+ xml:space="preserve"
113+ inkscape:export-xdpi="61.120499"
114+ inkscape:export-ydpi="61.120499"><tspan
115+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;stroke-width:0.26458332"
116+ y="110.99791"
117+ x="82.814583"
118+ id="tspan18"
119+ sodipodi:role="line">solve</tspan></text>
120+ <path
121+ style="fill:none;stroke:#ff0000;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
122+ d="m 80.668481,106.30075 -0.0032,7.57492"
123+ id="path4518"
124+ inkscape:connector-curvature="0"
125+ sodipodi:nodetypes="cc"
126+ inkscape:export-xdpi="61.120499"
127+ inkscape:export-ydpi="61.120499" />
128+ <text
129+ inkscape:export-ydpi="61.120499"
130+ inkscape:export-xdpi="61.120499"
131+ xml:space="preserve"
132+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
133+ x="56.620823"
134+ y="93.006248"
135+ id="text832"><tspan
136+ sodipodi:role="line"
137+ id="tspan830"
138+ x="56.620823"
139+ y="93.006248"
140+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;stroke-width:0.26458332">focus</tspan></text>
141+ <path
142+ inkscape:export-ydpi="61.120499"
143+ inkscape:export-xdpi="61.120499"
144+ sodipodi:nodetypes="cc"
145+ inkscape:connector-curvature="0"
146+ id="path834"
147+ d="m 57.649725,94.659084 -0.0032,5.458256"
148+ style="fill:none;stroke:#0000ff;stroke-width:0.5291667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker838)" />
149+ <text
150+ inkscape:export-ydpi="61.120499"
151+ inkscape:export-xdpi="61.120499"
152+ xml:space="preserve"
153+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
154+ x="56.356247"
155+ y="104.91254"
156+ id="text842"><tspan
157+ sodipodi:role="line"
158+ id="tspan840"
159+ x="56.356247"
160+ y="104.91254"
161+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.26458332">?{hole} ≈ Prelude.Nat.Z . {hole}</tspan></text>
162+ </g>
163+</svg>
docs/image/tokenise.pngnew file

Binary file not shown.

docs/image/tokenise.svgnew file+740
@@ -0,0 +1,740 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 210 297"
15+ version="1.1"
16+ id="svg8"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="tokenise.svg">
19+ <defs
20+ id="defs2">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker7119"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow1Mend">
29+ <path
30+ transform="scale(0.4) rotate(180) translate(10,0)"
31+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
32+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
33+ id="path7117" />
34+ </marker>
35+ <marker
36+ inkscape:stockid="Arrow1Mend"
37+ orient="auto"
38+ refY="0.0"
39+ refX="0.0"
40+ id="marker4031"
41+ style="overflow:visible;"
42+ inkscape:isstock="true"
43+ inkscape:collect="always">
44+ <path
45+ id="path4029"
46+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
47+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
48+ transform="scale(0.4) rotate(180) translate(10,0)" />
49+ </marker>
50+ <marker
51+ inkscape:isstock="true"
52+ style="overflow:visible;"
53+ id="marker1931"
54+ refX="0.0"
55+ refY="0.0"
56+ orient="auto"
57+ inkscape:stockid="Arrow1Mend"
58+ inkscape:collect="always">
59+ <path
60+ transform="scale(0.4) rotate(180) translate(10,0)"
61+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
62+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
63+ id="path1929" />
64+ </marker>
65+ <marker
66+ inkscape:stockid="Arrow1Mend"
67+ orient="auto"
68+ refY="0.0"
69+ refX="0.0"
70+ id="Arrow1Mend"
71+ style="overflow:visible;"
72+ inkscape:isstock="true"
73+ inkscape:collect="always">
74+ <path
75+ id="path1036"
76+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
77+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
78+ transform="scale(0.4) rotate(180) translate(10,0)" />
79+ </marker>
80+ </defs>
81+ <sodipodi:namedview
82+ id="base"
83+ pagecolor="#ffffff"
84+ bordercolor="#666666"
85+ borderopacity="1.0"
86+ inkscape:pageopacity="0.0"
87+ inkscape:pageshadow="2"
88+ inkscape:zoom="1"
89+ inkscape:cx="497.48698"
90+ inkscape:cy="885.5"
91+ inkscape:document-units="mm"
92+ inkscape:current-layer="layer1"
93+ showgrid="false"
94+ inkscape:window-width="1920"
95+ inkscape:window-height="1015"
96+ inkscape:window-x="0"
97+ inkscape:window-y="0"
98+ inkscape:window-maximized="1" />
99+ <metadata
100+ id="metadata5">
101+ <rdf:RDF>
102+ <cc:Work
103+ rdf:about="">
104+ <dc:format>image/svg+xml</dc:format>
105+ <dc:type
106+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
107+ <dc:title></dc:title>
108+ </cc:Work>
109+ </rdf:RDF>
110+ </metadata>
111+ <g
112+ inkscape:label="Layer 1"
113+ inkscape:groupmode="layer"
114+ id="layer1">
115+ <rect
116+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
117+ id="rect815"
118+ width="4.3310161"
119+ height="4.3471913"
120+ x="61.383358"
121+ y="51.995804"
122+ inkscape:export-xdpi="61.120499"
123+ inkscape:export-ydpi="61.120499" />
124+ <text
125+ xml:space="preserve"
126+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
127+ x="62.917812"
128+ y="55.649193"
129+ id="text819"
130+ inkscape:export-xdpi="61.120499"
131+ inkscape:export-ydpi="61.120499"><tspan
132+ sodipodi:role="line"
133+ id="tspan817"
134+ x="62.917812"
135+ y="55.649193"
136+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">i</tspan></text>
137+ <rect
138+ y="51.995804"
139+ x="65.714371"
140+ height="4.3471913"
141+ width="4.3310161"
142+ id="rect823"
143+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
144+ inkscape:export-xdpi="61.120499"
145+ inkscape:export-ydpi="61.120499" />
146+ <text
147+ id="text827"
148+ y="55.307304"
149+ x="66.760414"
150+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
151+ xml:space="preserve"
152+ inkscape:export-xdpi="61.120499"
153+ inkscape:export-ydpi="61.120499"><tspan
154+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
155+ y="55.307304"
156+ x="66.760414"
157+ id="tspan825"
158+ sodipodi:role="line">n</tspan></text>
159+ <rect
160+ y="51.995804"
161+ x="70.045387"
162+ height="4.3471913"
163+ width="4.3310161"
164+ id="rect829"
165+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
166+ inkscape:export-xdpi="61.120499"
167+ inkscape:export-ydpi="61.120499" />
168+ <text
169+ id="text833"
170+ y="55.063095"
171+ x="71.237953"
172+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
173+ xml:space="preserve"
174+ inkscape:export-xdpi="61.120499"
175+ inkscape:export-ydpi="61.120499"><tspan
176+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
177+ y="55.063095"
178+ x="71.237953"
179+ id="tspan831"
180+ sodipodi:role="line">p</tspan></text>
181+ <rect
182+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
183+ id="rect835"
184+ width="4.3310161"
185+ height="4.3471913"
186+ x="74.376404"
187+ y="51.995804"
188+ inkscape:export-xdpi="61.120499"
189+ inkscape:export-ydpi="61.120499" />
190+ <text
191+ xml:space="preserve"
192+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
193+ x="75.422447"
194+ y="55.356148"
195+ id="text839"
196+ inkscape:export-xdpi="61.120499"
197+ inkscape:export-ydpi="61.120499"><tspan
198+ sodipodi:role="line"
199+ id="tspan837"
200+ x="75.422447"
201+ y="55.356148"
202+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">u</tspan></text>
203+ <rect
204+ y="51.995804"
205+ x="78.70742"
206+ height="4.3471913"
207+ width="4.3310161"
208+ id="rect841"
209+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
210+ inkscape:export-xdpi="61.120499"
211+ inkscape:export-ydpi="61.120499" />
212+ <text
213+ id="text845"
214+ y="55.649193"
215+ x="80.241875"
216+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
217+ xml:space="preserve"
218+ inkscape:export-xdpi="61.120499"
219+ inkscape:export-ydpi="61.120499"><tspan
220+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
221+ y="55.649193"
222+ x="80.241875"
223+ id="tspan843"
224+ sodipodi:role="line">t</tspan></text>
225+ <rect
226+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
227+ id="rect847"
228+ width="4.3310161"
229+ height="4.3471913"
230+ x="83.038437"
231+ y="51.995804"
232+ inkscape:export-xdpi="61.120499"
233+ inkscape:export-ydpi="61.120499" />
234+ <text
235+ xml:space="preserve"
236+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
237+ x="59.172871"
238+ y="88.457558"
239+ id="text851"><tspan
240+ sodipodi:role="line"
241+ id="tspan849"
242+ x="59.172871"
243+ y="92.350197"
244+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none" /></text>
245+ <rect
246+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
247+ id="rect853"
248+ width="4.3310161"
249+ height="4.3471913"
250+ x="87.369453"
251+ y="51.995804"
252+ inkscape:export-xdpi="61.120499"
253+ inkscape:export-ydpi="61.120499" />
254+ <text
255+ xml:space="preserve"
256+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
257+ x="88.46434"
258+ y="55.453827"
259+ id="text857"
260+ inkscape:export-xdpi="61.120499"
261+ inkscape:export-ydpi="61.120499"><tspan
262+ sodipodi:role="line"
263+ id="tspan855"
264+ x="88.46434"
265+ y="55.453827"
266+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">s</tspan></text>
267+ <rect
268+ y="51.995804"
269+ x="91.70047"
270+ height="4.3471913"
271+ width="4.3310161"
272+ id="rect859"
273+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
274+ inkscape:export-xdpi="61.120499"
275+ inkscape:export-ydpi="61.120499" />
276+ <text
277+ id="text863"
278+ y="55.649193"
279+ x="93.234924"
280+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
281+ xml:space="preserve"
282+ inkscape:export-xdpi="61.120499"
283+ inkscape:export-ydpi="61.120499"><tspan
284+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
285+ y="55.649193"
286+ x="93.234924"
287+ id="tspan861"
288+ sodipodi:role="line">t</tspan></text>
289+ <rect
290+ y="51.995804"
291+ x="96.031487"
292+ height="4.3471913"
293+ width="4.3310161"
294+ id="rect865"
295+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
296+ inkscape:export-xdpi="61.120499"
297+ inkscape:export-ydpi="61.120499" />
298+ <text
299+ id="text869"
300+ y="55.649193"
301+ x="97.565941"
302+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
303+ xml:space="preserve"
304+ inkscape:export-xdpi="61.120499"
305+ inkscape:export-ydpi="61.120499"><tspan
306+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
307+ y="55.649193"
308+ x="97.565941"
309+ id="tspan867"
310+ sodipodi:role="line">r</tspan></text>
311+ <rect
312+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
313+ id="rect871"
314+ width="4.3310161"
315+ height="4.3471913"
316+ x="100.3625"
317+ y="51.995804"
318+ inkscape:export-xdpi="61.120499"
319+ inkscape:export-ydpi="61.120499" />
320+ <text
321+ xml:space="preserve"
322+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
323+ x="101.89697"
324+ y="55.649193"
325+ id="text875"
326+ inkscape:export-xdpi="61.120499"
327+ inkscape:export-ydpi="61.120499"><tspan
328+ sodipodi:role="line"
329+ id="tspan873"
330+ x="101.89697"
331+ y="55.649193"
332+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">i</tspan></text>
333+ <rect
334+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
335+ id="rect877"
336+ width="4.3310161"
337+ height="4.3471913"
338+ x="104.69353"
339+ y="51.995804"
340+ inkscape:export-xdpi="61.120499"
341+ inkscape:export-ydpi="61.120499" />
342+ <text
343+ xml:space="preserve"
344+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
345+ x="105.73955"
346+ y="55.50267"
347+ id="text881"
348+ inkscape:export-xdpi="61.120499"
349+ inkscape:export-ydpi="61.120499"><tspan
350+ sodipodi:role="line"
351+ id="tspan879"
352+ x="105.73955"
353+ y="55.50267"
354+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">n</tspan></text>
355+ <rect
356+ y="51.995804"
357+ x="109.0245"
358+ height="4.3471913"
359+ width="4.3310161"
360+ id="rect883"
361+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
362+ inkscape:export-xdpi="61.120499"
363+ inkscape:export-ydpi="61.120499" />
364+ <text
365+ id="text887"
366+ y="54.965416"
367+ x="110.21709"
368+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
369+ xml:space="preserve"
370+ inkscape:export-xdpi="61.120499"
371+ inkscape:export-ydpi="61.120499"><tspan
372+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
373+ y="54.965416"
374+ x="110.21709"
375+ id="tspan885"
376+ sodipodi:role="line">g</tspan></text>
377+ <text
378+ xml:space="preserve"
379+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
380+ x="125.67681"
381+ y="55.359386"
382+ id="text893"
383+ inkscape:export-xdpi="61.120499"
384+ inkscape:export-ydpi="61.120499"><tspan
385+ sodipodi:role="line"
386+ id="tspan891"
387+ x="125.67681"
388+ y="55.359386"
389+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">:String</tspan></text>
390+ <rect
391+ y="51.995804"
392+ x="113.35551"
393+ height="4.3471913"
394+ width="4.3310161"
395+ id="rect895"
396+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
397+ inkscape:export-xdpi="61.120499"
398+ inkscape:export-ydpi="61.120499" />
399+ <text
400+ id="text899"
401+ y="55.50267"
402+ x="114.40154"
403+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
404+ xml:space="preserve"><tspan
405+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
406+ y="59.395306"
407+ x="114.40154"
408+ id="tspan897"
409+ sodipodi:role="line" /></text>
410+ <rect
411+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
412+ id="rect901"
413+ width="4.3310161"
414+ height="4.3471913"
415+ x="117.68649"
416+ y="51.995804"
417+ inkscape:export-xdpi="61.120499"
418+ inkscape:export-ydpi="61.120499" />
419+ <text
420+ xml:space="preserve"
421+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
422+ x="118.87907"
423+ y="55.494583"
424+ id="text905"
425+ inkscape:export-xdpi="61.120499"
426+ inkscape:export-ydpi="61.120499"><tspan
427+ sodipodi:role="line"
428+ id="tspan903"
429+ x="118.87907"
430+ y="55.494583"
431+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">1</tspan></text>
432+ <g
433+ id="g950"
434+ transform="translate(-15.319488,0.319156)"
435+ inkscape:export-xdpi="61.120499"
436+ inkscape:export-ydpi="61.120499">
437+ <rect
438+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
439+ id="rect907"
440+ width="11.990757"
441+ height="4.3471909"
442+ x="47.978806"
443+ y="69.310013" />
444+ <text
445+ xml:space="preserve"
446+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
447+ x="48.706326"
448+ y="72.963402"
449+ id="text911"><tspan
450+ sodipodi:role="line"
451+ id="tspan909"
452+ x="48.706326"
453+ y="72.963402"
454+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">token</tspan></text>
455+ <rect
456+ y="69.310013"
457+ x="59.969563"
458+ height="4.2674026"
459+ width="10.075821"
460+ id="rect913"
461+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
462+ <text
463+ id="text917"
464+ y="72.940666"
465+ x="61.015606"
466+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
467+ xml:space="preserve"><tspan
468+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
469+ y="72.940666"
470+ x="61.015606"
471+ id="tspan915"
472+ sodipodi:role="line">line</tspan></text>
473+ <rect
474+ y="69.389801"
475+ x="70.045387"
476+ height="4.1876144"
477+ width="7.5225825"
478+ id="rect919"
479+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
480+ <text
481+ id="text923"
482+ y="72.935829"
483+ x="70.998589"
484+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
485+ xml:space="preserve"><tspan
486+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
487+ y="72.935829"
488+ x="70.998589"
489+ id="tspan921"
490+ sodipodi:role="line">col</tspan></text>
491+ </g>
492+ <text
493+ id="text927"
494+ y="80.971657"
495+ x="40.541954"
496+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
497+ xml:space="preserve"
498+ inkscape:export-xdpi="61.120499"
499+ inkscape:export-ydpi="61.120499"><tspan
500+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
501+ y="80.971657"
502+ x="40.541954"
503+ sodipodi:role="line"
504+ id="tspan933">:(List (TokenData Token), Int, Int, String)</tspan></text>
505+ <g
506+ id="g970"
507+ transform="translate(16.596112,0.319156)"
508+ inkscape:export-xdpi="61.120499"
509+ inkscape:export-ydpi="61.120499">
510+ <rect
511+ y="69.310013"
512+ x="47.978806"
513+ height="4.3471909"
514+ width="11.990757"
515+ id="rect952"
516+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
517+ <text
518+ id="text956"
519+ y="72.963402"
520+ x="48.706326"
521+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
522+ xml:space="preserve"><tspan
523+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
524+ y="72.963402"
525+ x="48.706326"
526+ id="tspan954"
527+ sodipodi:role="line">token</tspan></text>
528+ <rect
529+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
530+ id="rect958"
531+ width="10.075821"
532+ height="4.2674026"
533+ x="59.969563"
534+ y="69.310013" />
535+ <text
536+ xml:space="preserve"
537+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
538+ x="61.015606"
539+ y="72.940666"
540+ id="text962"><tspan
541+ sodipodi:role="line"
542+ id="tspan960"
543+ x="61.015606"
544+ y="72.940666"
545+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">line</tspan></text>
546+ <rect
547+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
548+ id="rect964"
549+ width="7.5225825"
550+ height="4.1876144"
551+ x="70.045387"
552+ y="69.389801" />
553+ <text
554+ xml:space="preserve"
555+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
556+ x="70.998589"
557+ y="72.935829"
558+ id="text968"><tspan
559+ sodipodi:role="line"
560+ id="tspan966"
561+ x="70.998589"
562+ y="72.935829"
563+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">col</tspan></text>
564+ </g>
565+ <g
566+ transform="translate(48.591501,0.319156)"
567+ id="g990"
568+ inkscape:export-xdpi="61.120499"
569+ inkscape:export-ydpi="61.120499">
570+ <rect
571+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
572+ id="rect972"
573+ width="11.990757"
574+ height="4.3471909"
575+ x="47.978806"
576+ y="69.310013" />
577+ <text
578+ xml:space="preserve"
579+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
580+ x="48.706326"
581+ y="72.963402"
582+ id="text976"><tspan
583+ sodipodi:role="line"
584+ id="tspan974"
585+ x="48.706326"
586+ y="72.963402"
587+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">token</tspan></text>
588+ <rect
589+ y="69.310013"
590+ x="59.969563"
591+ height="4.2674026"
592+ width="10.075821"
593+ id="rect978"
594+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
595+ <text
596+ id="text982"
597+ y="72.940666"
598+ x="61.015606"
599+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
600+ xml:space="preserve"><tspan
601+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
602+ y="72.940666"
603+ x="61.015606"
604+ id="tspan980"
605+ sodipodi:role="line">line</tspan></text>
606+ <rect
607+ y="69.389801"
608+ x="70.045387"
609+ height="4.1876144"
610+ width="7.5225825"
611+ id="rect984"
612+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
613+ <text
614+ id="text988"
615+ y="72.935829"
616+ x="70.998589"
617+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
618+ xml:space="preserve"><tspan
619+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
620+ y="72.935829"
621+ x="70.998589"
622+ id="tspan986"
623+ sodipodi:role="line">col</tspan></text>
624+ </g>
625+ <path
626+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
627+ d="m 125.97308,68.549658 1.30238,0.0089 -0.0153,6.481345 h -1.30803"
628+ id="path992"
629+ inkscape:connector-curvature="0"
630+ sodipodi:nodetypes="cccc"
631+ inkscape:export-xdpi="61.120499"
632+ inkscape:export-ydpi="61.120499" />
633+ <path
634+ sodipodi:nodetypes="cccc"
635+ inkscape:connector-curvature="0"
636+ id="path994"
637+ d="m 32.561899,68.619523 -1.30238,0.0089 0.0153,6.481345 h 1.30803"
638+ style="fill:none;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
639+ inkscape:export-xdpi="61.120499"
640+ inkscape:export-ydpi="61.120499" />
641+ <rect
642+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
643+ id="rect996"
644+ width="11.990757"
645+ height="4.3471909"
646+ x="155.60759"
647+ y="69.899559"
648+ inkscape:export-xdpi="61.120499"
649+ inkscape:export-ydpi="61.120499" />
650+ <text
651+ xml:space="preserve"
652+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
653+ x="156.33508"
654+ y="73.552948"
655+ id="text1000"
656+ inkscape:export-xdpi="61.120499"
657+ inkscape:export-ydpi="61.120499"><tspan
658+ sodipodi:role="line"
659+ id="tspan998"
660+ x="156.33508"
661+ y="73.552948"
662+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none">string</tspan></text>
663+ <rect
664+ y="69.750786"
665+ x="130.3979"
666+ height="4.2674026"
667+ width="10.075821"
668+ id="rect1002"
669+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
670+ inkscape:export-xdpi="61.120499"
671+ inkscape:export-ydpi="61.120499" />
672+ <text
673+ id="text1006"
674+ y="73.381439"
675+ x="131.44394"
676+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
677+ xml:space="preserve"
678+ inkscape:export-xdpi="61.120499"
679+ inkscape:export-ydpi="61.120499"><tspan
680+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
681+ y="73.381439"
682+ x="131.44394"
683+ id="tspan1004"
684+ sodipodi:role="line">line</tspan></text>
685+ <rect
686+ y="69.830574"
687+ x="143.64868"
688+ height="4.1876144"
689+ width="7.5225825"
690+ id="rect1008"
691+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:0.97596154;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
692+ inkscape:export-xdpi="61.120499"
693+ inkscape:export-ydpi="61.120499" />
694+ <text
695+ id="text1012"
696+ y="73.376602"
697+ x="144.60188"
698+ style="font-style:normal;font-weight:normal;font-size:4.23333311px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
699+ xml:space="preserve"
700+ inkscape:export-xdpi="61.120499"
701+ inkscape:export-ydpi="61.120499"><tspan
702+ style="font-size:4.23333311px;stroke-width:0.70555556;stroke-miterlimit:4;stroke-dasharray:none"
703+ y="73.376602"
704+ x="144.60188"
705+ id="tspan1010"
706+ sodipodi:role="line">col</tspan></text>
707+ <path
708+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
709+ d="m 58.415342,69.700595 -0.143613,-5.887785 4.912582,-0.06048 0.03784,-6.371998"
710+ id="path1025"
711+ inkscape:connector-curvature="0"
712+ sodipodi:nodetypes="cccc"
713+ inkscape:export-xdpi="61.120499"
714+ inkscape:export-ydpi="61.120499" />
715+ <path
716+ inkscape:connector-curvature="0"
717+ id="path1927"
718+ d="m 89.918872,69.996556 -0.02264,-12.07186"
719+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1931)"
720+ sodipodi:nodetypes="cc"
721+ inkscape:export-xdpi="61.120499"
722+ inkscape:export-ydpi="61.120499" />
723+ <path
724+ sodipodi:nodetypes="cccc"
725+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4031)"
726+ d="m 122.08751,69.519138 -0.0832,-5.464386 -2.3456,-0.06048 -0.20406,-6.674425"
727+ id="path4027"
728+ inkscape:connector-curvature="0"
729+ inkscape:export-xdpi="61.120499"
730+ inkscape:export-ydpi="61.120499" />
731+ <path
732+ inkscape:connector-curvature="0"
733+ id="path7115"
734+ d="m 147.18896,69.882051 -0.0832,-5.827299 -22.72919,0 -0.446,-6.251027"
735+ style="fill:none;stroke:#000000;stroke-width:0.70555556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7119)"
736+ sodipodi:nodetypes="cccc"
737+ inkscape:export-xdpi="61.120499"
738+ inkscape:export-ydpi="61.120499" />
739+ </g>
740+</svg>
docs/image/tree.pngnew file

Binary file not shown.

docs/image/tree.svgnew file+212
@@ -0,0 +1,212 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="210mm"
13+ height="297mm"
14+ viewBox="0 0 744.09448819 1052.3622047"
15+ id="svg2"
16+ version="1.1"
17+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
18+ sodipodi:docname="tree.svg">
19+ <defs
20+ id="defs4">
21+ <marker
22+ inkscape:isstock="true"
23+ style="overflow:visible;"
24+ id="marker5204"
25+ refX="0.0"
26+ refY="0.0"
27+ orient="auto"
28+ inkscape:stockid="Arrow1Mend">
29+ <path
30+ transform="scale(0.4) rotate(180) translate(10,0)"
31+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
32+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
33+ id="path5206" />
34+ </marker>
35+ </defs>
36+ <sodipodi:namedview
37+ id="base"
38+ pagecolor="#ffffff"
39+ bordercolor="#666666"
40+ borderopacity="1.0"
41+ inkscape:pageopacity="0.0"
42+ inkscape:pageshadow="2"
43+ inkscape:zoom="1"
44+ inkscape:cx="383.03443"
45+ inkscape:cy="690.88799"
46+ inkscape:document-units="px"
47+ inkscape:current-layer="layer1"
48+ showgrid="false"
49+ inkscape:window-width="1129"
50+ inkscape:window-height="730"
51+ inkscape:window-x="671"
52+ inkscape:window-y="0"
53+ inkscape:window-maximized="0" />
54+ <metadata
55+ id="metadata7">
56+ <rdf:RDF>
57+ <cc:Work
58+ rdf:about="">
59+ <dc:format>image/svg+xml</dc:format>
60+ <dc:type
61+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
62+ <dc:title />
63+ </cc:Work>
64+ </rdf:RDF>
65+ </metadata>
66+ <g
67+ inkscape:label="Layer 1"
68+ inkscape:groupmode="layer"
69+ id="layer1">
70+ <text
71+ xml:space="preserve"
72+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
73+ x="348.5"
74+ y="334.92474"
75+ id="text4136"
76+ inkscape:export-xdpi="61.120499"
77+ inkscape:export-ydpi="61.120499"><tspan
78+ sodipodi:role="line"
79+ id="tspan4138"
80+ x="348.5"
81+ y="334.92474"
82+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;fill-opacity:1">{hole2} :Nat-&gt;Nat</tspan></text>
83+ <text
84+ id="text4152"
85+ y="364.17471"
86+ x="380.375"
87+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
88+ xml:space="preserve"
89+ inkscape:export-xdpi="61.120499"
90+ inkscape:export-ydpi="61.120499"><tspan
91+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;fill-opacity:1"
92+ y="364.17471"
93+ x="380.375"
94+ id="tspan4154"
95+ sodipodi:role="line">intro `{{x}}</tspan></text>
96+ <text
97+ xml:space="preserve"
98+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
99+ x="381.0625"
100+ y="470.23721"
101+ id="text4156"
102+ inkscape:export-xdpi="61.120499"
103+ inkscape:export-ydpi="61.120499"><tspan
104+ sodipodi:role="line"
105+ id="tspan4158"
106+ x="381.0625"
107+ y="470.23721"
108+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;fill-opacity:1">solve</tspan></text>
109+ <text
110+ id="text4160"
111+ y="414.42471"
112+ x="380.5625"
113+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
114+ xml:space="preserve"
115+ inkscape:export-xdpi="61.120499"
116+ inkscape:export-ydpi="61.120499"><tspan
117+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;fill-opacity:1"
118+ y="414.42471"
119+ x="380.5625"
120+ id="tspan4162"
121+ sodipodi:role="line">fill (Var `{{x}})</tspan></text>
122+ <path
123+ style="fill:#0000ff;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5204)"
124+ d="m 371.4375,343.4872 0.875,29.125"
125+ id="path5202"
126+ inkscape:connector-curvature="0"
127+ sodipodi:nodetypes="cc"
128+ inkscape:export-xdpi="61.120499"
129+ inkscape:export-ydpi="61.120499" />
130+ <path
131+ inkscape:export-ydpi="61.120499"
132+ inkscape:export-xdpi="61.120499"
133+ sodipodi:nodetypes="cc"
134+ inkscape:connector-curvature="0"
135+ id="path89"
136+ d="m 371.4375,395.9872 0.875,29.125"
137+ style="fill:#0000ff;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5204)" />
138+ <path
139+ style="fill:#0000ff;fill-rule:evenodd;stroke:#0000ff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5204)"
140+ d="m 371.4375,450.3622 0.875,29.125"
141+ id="path91"
142+ inkscape:connector-curvature="0"
143+ sodipodi:nodetypes="cc"
144+ inkscape:export-xdpi="61.120499"
145+ inkscape:export-ydpi="61.120499" />
146+ <text
147+ inkscape:export-ydpi="61.120499"
148+ inkscape:export-xdpi="61.120499"
149+ id="text95"
150+ y="332.11224"
151+ x="295.0625"
152+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
153+ xml:space="preserve"><tspan
154+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
155+ y="332.11224"
156+ x="295.0625"
157+ id="tspan93"
158+ sodipodi:role="line">state</tspan></text>
159+ <text
160+ xml:space="preserve"
161+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
162+ x="295.0625"
163+ y="386.48724"
164+ id="text99"
165+ inkscape:export-xdpi="61.120499"
166+ inkscape:export-ydpi="61.120499"><tspan
167+ sodipodi:role="line"
168+ id="tspan97"
169+ x="295.0625"
170+ y="386.48724"
171+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1">state</tspan></text>
172+ <text
173+ inkscape:export-ydpi="61.120499"
174+ inkscape:export-xdpi="61.120499"
175+ id="text103"
176+ y="444.61224"
177+ x="295.0625"
178+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
179+ xml:space="preserve"><tspan
180+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#ff0000;fill-opacity:1"
181+ y="444.61224"
182+ x="295.0625"
183+ id="tspan101"
184+ sodipodi:role="line">state</tspan></text>
185+ <text
186+ inkscape:export-ydpi="61.120499"
187+ inkscape:export-xdpi="61.120499"
188+ id="text3796"
189+ y="389.29974"
190+ x="345.6875"
191+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
192+ xml:space="preserve"><tspan
193+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;fill-opacity:1"
194+ y="389.29974"
195+ x="345.6875"
196+ id="tspan3794"
197+ sodipodi:role="line">λ x:Nat . ? {hole 2}</tspan></text>
198+ <text
199+ xml:space="preserve"
200+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
201+ x="344.75"
202+ y="442.73724"
203+ id="text3800"
204+ inkscape:export-xdpi="61.120499"
205+ inkscape:export-ydpi="61.120499"><tspan
206+ sodipodi:role="line"
207+ id="tspan3798"
208+ x="344.75"
209+ y="442.73724"
210+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#0000ff;fill-opacity:1">λ x:Nat . x</tspan></text>
211+ </g>
212+</svg>
docs/index.rst+9−109
@@ -13,118 +13,18 @@ Documentation for the Idris Language
1313 Idris Community* has waived all copyright and related or neighboring
1414 rights to Documentation for Idris.
1515
16− More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
16+ More information concerning the CC0 can be found online at: https://creativecommons.org/publicdomain/zero/1.0/
1717
1818
19−* :ref:`tutorial-index`
20−* :ref:`eff-tutorial-index`
21−* :ref:`faq-index`
22−* :ref:`proofs-index`
23−* :ref:`reference-index`
24−* :ref:`guides-index`
25−
26−
27−.. _tutorial:
28−
29−###################
30−The Idris Tutorial
31−###################
32−
33−.. toctree::
34− :maxdepth: 1
35−
36− tutorial/introduction
37− tutorial/starting
38− tutorial/typesfuns
39− tutorial/classes
40− tutorial/modules
41− tutorial/packages
42− tutorial/testing
43− tutorial/interp
44− tutorial/views
45− tutorial/theorems
46− tutorial/provisional
47− tutorial/interactive
48− tutorial/syntax
49− tutorial/miscellany
50− tutorial/conclusions
51−
52−.. _faq:
53−
54−##########################
55−Frequently Asked Questions
56−##########################
57−
5819.. toctree::
5920 :maxdepth: 1
6021
22+ tutorial/index
6123 faq/faq
62−
63−.. _effects:
64−
65−################
66−Learning Effects
67−################
68−
69−.. toctree::
70− :maxdepth: 1
71−
72− effects/introduction
73− effects/state
74− effects/simpleeff
75− effects/depeff
76− effects/impleff
77− effects/hangman
78− effects/conclusions
79− effects/summary
80−
81−.. _proofs:
82−
83−###############
84−Theorem Proving
85−###############
86−
87−.. toctree::
88− :maxdepth: 1
89−
90− proofs/pluscomm
91− proofs/inductive
92− proofs/patterns
93− proofs/interactive
94−
95−.. _reference:
96−
97−##################
98−Language Reference
99−##################
100−
101−.. toctree::
102− :maxdepth: 1
103−
104− reference/documenting
105− reference/packages
106− reference/uniqueness-types
107− reference/ffi
108− reference/syntax-guide
109− reference/erasure
110− reference/ide-protocol
111− reference/semantic-highlighting
112− reference/repl
113− reference/tactics
114− reference/compilation
115− reference/language-features
116− reference/language-extensions
117− reference/elaborator-reflection
118− reference/misc
119−
120−.. _guides:
121−
122−############
123−Short Guides
124−############
125−
126−.. toctree::
127− :maxdepth: 1
128−
129− guides/type-providers-ffi
130− guides/theorem-prover
24+ st/index
25+ effects/index
26+ proofs/index
27+ elaboratorReflection/index
28+ parserLibrary/index
29+ reference/index
30+ guides/index
docs/listing/idris-prompt-helloworld.txt+2−2
@@ -1,8 +1,8 @@
11$ idris hello.idr
22 ____ __ _
33 / _/___/ /____(_)____
4− / // __ / ___/ / ___/ Version 0.9.17
5− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
4+ / // __ / ___/ / ___/ Version 1.3.2
5+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
66 /___/\__,_/_/ /_/____/ Type :? for help
77
88Type checking ./hello.idr
docs/listing/idris-prompt-interp.txt+2−2
@@ -1,8 +1,8 @@
11$ idris interp.idr
22 ____ __ _
33 / _/___/ /____(_)____
4− / // __ / ___/ / ___/ Version 0.9.17
5− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
4+ / // __ / ___/ / ___/ Version 1.3.2
5+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
66 /___/\__,_/_/ /_/____/ Type :? for help
77
88Type checking ./interp.idr
docs/listing/idris-prompt-start.txt+2−2
@@ -1,8 +1,8 @@
11$ idris
22 ____ __ _
33 / _/___/ /____(_)____
4− / // __ / ___/ / ___/ Version 0.9.17
5− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
4+ / // __ / ___/ / ___/ Version 1.3.2
5+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
66/___/\__,_/_/ /_/____/ Type :? for help
77
88Idris>
docs/make.bat+1−1
@@ -65,7 +65,7 @@ if errorlevel 9009 (
6565 echo.may add the Sphinx directory to PATH.
6666 echo.
6767 echo.If you don't have Sphinx installed, grab it from
68− echo.http://sphinx-doc.org/
68+ echo.https://www.sphinx-doc.org/
6969 exit /b 1
7070)
7171
docs/faq/index.rst → docs/parserLibrary/index.rstrenamed+11−6
@@ -1,10 +1,13 @@
1−.. _faq-index:
1+.. _parserLibrary:
22
3−##########################
4−Frequently Asked Questions
5−##########################
3+########################
4+Lexer and Parser Library
5+########################
6+
7+A tutorial on the lexer and parser library in Idris.
68
79.. note::
10+
811 The documentation for Idris has been published under the Creative
912 Commons CC0 License. As such to the extent possible under law, *The
1013 Idris Community* has waived all copyright and related or neighboring
@@ -12,8 +15,10 @@ Frequently Asked Questions
1215
1316 More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
1417
15−
1618.. toctree::
1719 :maxdepth: 1
1820
19− faq
21+ introduction
22+ lexer
23+ parser
24+ whitespace
docs/parserLibrary/introduction.rstnew file+76
@@ -0,0 +1,76 @@
1+.. _parserLibraryIntro:
2+
3+***************************
4+Parser Library Introduction
5+***************************
6+
7+The parser library can be used to build Idris structures from text. It involves a
8+certain amount of complexity and so it would typically be used for big projects.
9+An example might be a compiler for another language, written in Idris.
10+
11+Of course the parser library can also be used to compile to Idris, this is what
12+is done in Idris 2 and that is what the this library appears to have been
13+written for.
14+
15+So a secondary use for this tutorial would be to help understanding the internal
16+workings of Idris 2.
17+
18+The parser library is used in a similar way to Parsec which is a library for
19+writing parsers in Haskell. It is based on higher-order parser combinators, so a
20+complicated parser can be made out of many smaller ones.
21+
22+.. list-table::
23+
24+ * - This is a two stage process:
25+ - Lexer - This takes the input string and turns it into a list of Tokens.
26+ - Parser - This takes the list of tokens and outputs the code.
27+
28+ - .. image:: ../image/parserTopLevel.png
29+ :width: 307px
30+ :height: 76px
31+ :alt: diagram illustrating these stages of lexer and parser
32+
33+The advantage of using two stages, like this, is that things like whitespace and
34+comments don't need to be considered in every parser rule.
35+
36+The Idris parser library differs from Parsec in that you need to say, in the
37+Recogniser, whether a rule is guaranteed to consume input. This means that the
38+Idris type system prevents the construction of recognisers/rules that can't
39+consume the input.
40+
41+The Lexer is similar but works at the level of characters rather than tokens, and
42+you need to provide a TokenMap which defines how to build a token from
43+a string when a rule is matched.
44+
45+The following pages contain a tutorial for the :ref:`parserLibraryLexer` and a
46+tutorial for the :ref:`parserLibraryParser`. These tutorials have a running
47+example of a parser for integer expressions. This is a very simple example, there
48+may be easier ways to do something so simple, but it illustrates some of the
49+principles.
50+
51+Parser Library and Idris 2
52+--------------------------
53+
54+The parser library, in Idris 1, is almost the same as the code that the Idris 2
55+parser is built on. Even if you only want to use the Idris 1 parser library it
56+is useful to look at the code in the Idris 2 compilers to see how the library
57+can be used.
58+
59+Idris 2 has at least 3 compilers:
60+
61+- IDEMode - complies to SExp which is a Lisp-like structure used to communicate
62+ with external editors like Emacs and Vim.
63+- Idris.Parser - This is the main compiler which compiles from a file to
64+ PTerm (and eventually TT structure).
65+- REPL - compiles input from the command line.
66+
67+The following diagram is my first attempt to work out how some of the modules in
68+Idris 2 fit together (with a few of the dependencies between them shown). The
69+Idris 1 library is based on the modules at the bottom of the diagram (shown
70+in red).
71+
72+.. image:: ../image/parserModules.png
73+ :width: 460px
74+ :height: 496px
75+ :alt: diagram illustrating these stages of lexer and parser
76+
docs/parserLibrary/lexer.rstnew file+288
@@ -0,0 +1,288 @@
1+.. _parserLibraryLexer:
2+
3+Lexer
4+=====
5+
6+The lexer is run by calling the 'lex' function in the Text.Lexer.Core
7+module:
8+
9+.. code-block:: idris
10+
11+ lex : TokenMap a -> String -> (List (TokenData a), (Int, Int, String))
12+
13+.. list-table::
14+
15+ * - This function takes a String and returns a list of tokens. With the
16+ tokens we have indexes back to the original string which can be used
17+ in error messages:
18+
19+ - .. image:: ../image/tokenise.png
20+ :width: 330px
21+ :height: 73px
22+ :alt: diagram illustrating these stages of lexer
23+
24+TokenMap
25+--------
26+
27+In order to construct this list of tokens we need:
28+
29+- A way to recognise the tokens in the input string.
30+- A way to construct these individual tokens.
31+
32+This is given by the TokenMap which is a list of pairs containing
33+this information:
34+
35+.. code-block:: idris
36+
37+ (Lexer, String -> tokenType)
38+
39+So for each Lexer in the list, if a substring in the input matches, run
40+the associated function to produce a token of type ``tokenType``
41+
42+.. list-table::
43+
44+ * - from Text.Lexer.Core
45+ : https://github.com/idris-lang/Idris-dev/blob/master/libs/contrib/Text/Lexer/Core.idr
46+
47+ - .. code-block:: idris
48+
49+ TokenMap : (tokenType : Type) -> Type
50+ TokenMap tokenType = List (Lexer, String -> tokenType)
51+
52+ * - We can create a tokenMap by using a function like this:
53+
54+ - .. code-block:: idris
55+
56+ myTokenMap : TokenMap Token
57+ myTokenMap = [(is 'a',CharLit)]
58+
59+Once we have a TokenMap we can use it to lex many strings.
60+
61+Recognisers
62+-----------
63+
64+The first part of each entry in the TokenMap is the recogniser.
65+
66+A simple recogniser is 'Pred' which uses a predicate (Char -> Bool) to
67+test whether to accept the character. It can be constructed using the
68+'is' function:
69+
70+.. code-block:: idris
71+
72+ *parserEx> is 'a'
73+ Pred (\ARG =>
74+ intToBool (prim__eqChar ARG 'a'))
75+ : Recognise True
76+
77+More complicated structures can be recognised as tokens, this is done using
78+the combinator structure of recognisers. This allows recognisers to be
79+combined, for example,
80+
81+.. list-table::
82+
83+ * - ``<+>`` means sequence two recognisers. If either consumes a character,
84+ the sequence is guaranteed to consume a character.
85+
86+ - .. code-block:: idris
87+
88+ *parserEx> is 'a' <+> is 'b'
89+ SeqEat (Pred (\ARG => intToBool (prim__eqChar ARG 'a')))
90+ (Delay (is 'b')) : Recognise True
91+
92+ * - ``<|>`` means if both consume, the combination is guaranteed
93+ to consumer a character:
94+
95+ - .. code-block:: idris
96+
97+ *parserEx> is 'a' <|> is 'b'
98+ Alt (Pred (\ARG => intToBool (prim__eqChar ARG 'a')))
99+ (Pred (\ARG => intToBool (prim__eqChar ARG 'b')))
100+ : Recognise True
101+
102+This diagram shows the recogniser combinator with some of its constructors:
103+
104+.. image:: ../image/recogniser.png
105+ :width: 487px
106+ :height: 249px
107+ :alt: recogniser data structure
108+
109+A recogniser consumes its input, that is it advances the index to its input
110+string, as it generates the token list. In some cases we don't want this to
111+happen, for instance, we may need to lookahead before consuming the input
112+string.
113+
114+If a recogniser does not consume input there is a danger of an infinite loop.
115+To prevent this the recogniser is dependent on a boolean called 'consumes' which
116+is true if the recogniser is guaranteed to consume at least one character.
117+
118+The constructors of Recognise allow us to ensure that, even though parts of
119+the recogniser may not consume, overall the recogniser will consume.
120+
121+Since 'Recognise True' is more common than 'Recognise False' it is convenient to
122+use 'Lexer' as a type synonym for 'Recognise True'.
123+
124+Whitespace and Comments
125+-----------------------
126+
127+An important reason to have a lexer is to simplify the parser when whitespace
128+or comments are required. Without this the parser would require a match for
129+every combination, with and without, whitespace and comments.
130+
131+In some languages the lexer needs to remove whitespace and comments so that
132+they don't appear in the token list. In some cases whitespace is significant
133+but a single whitespace token can stand for any number of spaces, tabs,
134+carriage returns and so on.
135+
136+In some cases, such as when parsing the Idris language itself, whitespace
137+is important to indicate blocks. In this case we might want to output a
138+start-of-block token when the indent increases and an end-of-block token
139+when the indent decreases.
140+
141+This topic will be discussed more fully on this page
142+:ref:`parserLibraryWhitespace`.
143+
144+Simple Expression Example for Lexer
145+-----------------------------------
146+
147+On this page we will implement a lexer to 'lex' a very simple expression as
148+a running example, on the next page, we will go on to implement a parser for it.
149+
150+First import the lexer and parser code:
151+
152+.. code-block:: idris
153+
154+ module ParserExample
155+
156+ import Text.Lexer
157+ import public Text.Parser.Core
158+ import public Text.Parser
159+
160+Then decide on the tokens that are needed. For this example the idea is to be
161+able to parse simple arithmetic expressions, like this:
162+
163+.. code-block:: idris
164+
165+ 1+(2*3)
166+
167+so we need:
168+
169+- Numbers (for now integer literals are good enough).
170+- Some operators (for now ``+``, ``-`` and ``*`` will do.
171+- Opening and closing Parentheses.
172+
173+We can define these, as tokens, like this:
174+
175+.. code-block:: idris
176+
177+ %default total
178+
179+ public export
180+ data ExpressionToken = Number Integer
181+ | Operator String
182+ | OParen
183+ | CParen
184+ | EndInput
185+
186+It may help with debugging and to implement error messages to
187+implement ``show`` for these tokens:
188+
189+.. code-block:: idris
190+
191+ export
192+ Show ExpressionToken where
193+ show (Number x) = "number " ++ show x
194+ show (Operator x) = "operator " ++ x
195+ show OParen = "("
196+ show CParen = ")"
197+ show EndInput = "end of input"
198+
199+ export
200+ Show (TokenData ExpressionToken) where
201+ show (MkToken l c t) = "line=" ++ show l ++ " col=" ++ show c ++ "tok=" ++ show t
202+
203+The following defines the 'TokenMap' for this example:
204+
205+.. code-block:: idris
206+
207+ ||| integer arithmetic operators plus, minus and multiply.
208+ export
209+ opChars : String
210+ opChars = "+-*"
211+
212+ operator : Lexer
213+ operator = some (oneOf opChars)
214+
215+ toInt' : String -> Integer
216+ toInt' = cast
217+
218+ expressionTokens : TokenMap ExpressionToken
219+ expressionTokens =
220+ [(digits, \x => Number (toInt' x)),
221+ (operator, \x => Operator x),
222+ (is '(' ,\x => OParen),
223+ (is ')' ,\x => CParen)]
224+
225+This specifies the lexer. It gives, for each token, a function to recognise
226+the token type and a function to construct the token.
227+
228+The library module 'Text.Lexer' contains useful functions to help with this.
229+For example, the digits function used above, which reads one or more
230+numeric characters.
231+
232+We can now run the code with various strings to see what output the lexer
233+produces. This is done by calling the 'lex' function with the TokenMap and
234+input string as parameters:
235+
236+.. code-block:: idris
237+
238+ cd Idris-dev/libs/contrib
239+ idris -p contrib parserEx.idr
240+ ____ __ _
241+ / _/___/ /____(_)____
242+ / // __ / ___/ / ___/ Version 1.3.2
243+ _/ // /_/ / / / (__ ) http://www.idris-lang.org/
244+ /___/\__,_/_/ /_/____/ Type :? for help
245+
246+ Idris is free software with ABSOLUTELY NO WARRANTY.
247+ For details type :warranty.
248+ Type checking ./Text/Token.idr
249+ Type checking ./Text/Quantity.idr
250+ Type checking ./Control/Delayed.idr
251+ Type checking ./Data/Bool/Extra.idr
252+ Type checking ./Text/Lexer/Core.idr
253+ Type checking ./Text/Lexer.idr
254+ Type checking ./parserEx.idr
255+
256+ *parserEx> lex expressionTokens "1+2"
257+ ([MkToken 0 0 (Number 1),
258+ MkToken 0
259+ (case fspan (\ARG => not (intToBool (prim__eqChar ARG '\n'))) "1" of
260+ (incol, "") => c + cast (length incol)
261+ (incol, b) => cast (length incol))
262+ (Operator "+"),
263+ MkToken 0
264+ (case fspan (\ARG => not (intToBool (prim__eqChar ARG '\n'))) "+" of
265+ (incol, "") => c + cast (length incol)
266+ (incol, b) => cast (length incol))
267+ (Number 2)],
268+ 0,
269+ case fspan (\ARG => not (intToBool (prim__eqChar ARG '\n'))) "2" of
270+ (incol, "") => c + cast (length incol)
271+ (incol, b) => cast (length incol),
272+ getString (MkStrLen "" 0)) : (List (TokenData ExpressionToken),
273+ Int,
274+ Int,
275+ String)
276+
277+The lexer uses potentially infinite data structures. It has recursive
278+arguments (codata type) so code is lazy. In the output above the indexes
279+have not been computed but we can pick out the tokens:
280+
281+- (Number 1)
282+- (Operator "+")
283+- (Number 2)
284+
285+So the code is working.
286+
287+We can now go ahead and parse this token list. A parser for this example will
288+be constructed on the next page.
docs/parserLibrary/parser.rstnew file+700
@@ -0,0 +1,700 @@
1+.. _parserLibraryParser:
2+
3+Parser
4+======
5+
6+To run the parser we call ``parse``. This requires a grammar and the output
7+from the lexer (which is a list of tokens).
8+
9+.. code-block:: idris
10+
11+ parse : (act : Grammar tok c ty) -> (xs : List tok) ->
12+ Either (ParseError tok) (ty, List tok)
13+
14+If successful this returns 'Right' with a pair of
15+
16+- the parse result.
17+- the unparsed tokens (the remaining input).
18+
19+otherwise it returns 'Left' with the error message.
20+
21+So we need to define the grammar for our parser, this is done using the following
22+'Grammar' data structure. This is a combinator structure, similar in principle
23+to the recogniser combinator for the lexer, which was discussed on the
24+previous page.
25+
26+As with the Recogniser the ``Grammar`` type is dependent on a boolean 'consumes'
27+value which allows us to ensure that complicated ``Grammar`` structures will always
28+consume input.
29+
30+.. code-block:: idris
31+
32+ ||| Description of a language's grammar. The `tok` parameter is the type
33+ ||| of tokens, and the `consumes` flag is True if the language is guaranteed
34+ ||| to be non-empty - that is, successfully parsing the language is guaranteed
35+ ||| to consume some input.
36+ public export
37+ data Grammar : (tok : Type) -> (consumes : Bool) -> Type -> Type where
38+ Empty : (val : ty) -> Grammar tok False ty
39+ Terminal : String -> (tok -> Maybe a) -> Grammar tok True a
40+ NextIs : String -> (tok -> Bool) -> Grammar tok False tok
41+ EOF : Grammar tok False ()
42+
43+ Fail : Bool -> String -> Grammar tok c ty
44+ Commit : Grammar tok False ()
45+ MustWork : Grammar tok c a -> Grammar tok c a
46+
47+ SeqEat : Grammar tok True a -> Inf (a -> Grammar tok c2 b) ->
48+ Grammar tok True b
49+ SeqEmpty : {c1, c2 : Bool} ->
50+ Grammar tok c1 a -> (a -> Grammar tok c2 b) ->
51+ Grammar tok (c1 || c2) b
52+ Alt : {c1, c2 : Bool} ->
53+ Grammar tok c1 ty -> Grammar tok c2 ty ->
54+ Grammar tok (c1 && c2) ty
55+
56+So an example of a grammer type may look something like this:
57+``Grammar (TokenData ExpressionToken) True Integer``.
58+This is a complicated type name and a given parser will need to use it a lot.
59+So to reduce the amount of typing we can use the following type synonym (similar
60+to what is done in Idris 2
61+: https://github.com/edwinb/Idris2/blob/master/src/Parser/Support.idr
62+)
63+
64+.. code-block:: idris
65+
66+ public export
67+ Rule : Type -> Type
68+ Rule ty = Grammar (TokenData ExpressionToken) True ty
69+
70+Parser Example
71+--------------
72+
73+On the previous page we implemented a lexer to 'lex' a very simple expression, on
74+this page we will go on to add a parser for this running example.
75+
76+.. list-table::
77+
78+ * - The syntax we are aiming at is something
79+ like this (expressed in Backus–Naur form (BNF)):
80+ - .. code-block:: idris
81+
82+ <expr> ::= <integer literal>
83+ | <expr>'+'<expr>
84+ | <expr>'-'<expr>
85+ | <expr>'*'<expr>
86+ | '('<expr>')'
87+
88+ <integer literal> ::= <digit>|<integer literal><digit>
89+
90+.. list-table::
91+
92+ * - To start, here is a grammar to parse an integer literal (that is, a
93+ sequence of numeric characters).
94+
95+ - .. code-block:: idris
96+
97+ export
98+ intLiteral : Rule Integer
99+ intLiteral
100+ = terminal (\x => case tok x of
101+ Number i => Just i
102+ _ => Nothing)
103+
104+In order to try this out, here is a temporary function, this calls
105+parse which takes two parameters:
106+
107+- The grammar (in this case intLiteral)
108+- The token list from the lexer.
109+
110+.. code-block:: idris
111+
112+ test1 : String -> Either (ParseError (TokenData ExpressionToken))
113+ (Integer, List (TokenData ExpressionToken))
114+ test1 s = parse intLiteral (fst (lex expressionTokens s))
115+
116+As required, if we pass it a string which is a number literal then it will
117+return the number in the 'Right' option.
118+
119+.. code-block:: idris
120+
121+ *parserEx> test1 "123"
122+ Right (123, []) : Either (ParseError (TokenData ExpressionToken))
123+ (Integer, List (TokenData ExpressionToken))
124+
125+If we pass it a string which is not a number literal then it will return an
126+error message.
127+
128+.. code-block:: idris
129+
130+ *parserEx> test1 "a"
131+ Left (Error "End of input"
132+ []) : Either (ParseError (TokenData ExpressionToken))
133+ (Integer, List (TokenData ExpressionToken))
134+
135+If we pass it a number followed by something else, then it will still be
136+successful, this is because we are not specifically checking for end-of-file.
137+
138+.. code-block:: idris
139+
140+ *parserEx> test1 "123a"
141+ Right (123, []) : Either (ParseError (TokenData ExpressionToken))
142+ (Integer, List (TokenData ExpressionToken))
143+ *parserEx>
144+
145+.. list-table::
146+
147+ * - The ``intLiteral`` function above uses the ``terminal`` function to
148+ construct the grammar
149+ - .. code-block:: idris
150+
151+ ||| Succeeds if running the predicate on the
152+ ||| next token returns Just x, returning x.
153+ ||| Otherwise fails.
154+ export
155+ terminal : (tok -> Maybe a) -> Grammar tok True a
156+ terminal = Terminal
157+
158+This is defined here
159+: https://github.com/idris-lang/Idris-dev/blob/master/libs/contrib/Text/Parser/Core.idr
160+Idris 2 uses a slightly different version which stores an error message like
161+"Expected integer literal" which can be output if the rule fails
162+: https://github.com/edwinb/Idris2/blob/master/src/Text/Parser/Core.idr
163+
164+.. list-table::
165+
166+ * - The 'terminal' function is also used to construct the other
167+ elements of the grammar that we require, for instance,
168+ opening parenthesis:
169+
170+ - .. code-block:: idris
171+
172+ openParen : Rule Integer
173+ openParen = terminal (\x => case tok x of
174+ OParen => Just 0
175+ _ => Nothing)
176+
177+Integer value is not really relevant for parenthesis so ``0`` (zero) is used as
178+a default value.
179+
180+As before, this can be tested with a function like this:
181+
182+.. code-block:: idris
183+
184+ test2 : String -> Either (ParseError (TokenData ExpressionToken))
185+ (Integer, List (TokenData ExpressionToken))
186+ test2 s = parse openParen (fst (lex expressionTokens s))
187+
188+We can see below that it correctly parses an open parenthesis and gives an
189+error for anything else:
190+
191+.. code-block:: idris
192+
193+ *parserEx> test2 "("
194+ Right (0, []) : Either (ParseError (TokenData ExpressionToken))
195+ (Integer, List (TokenData ExpressionToken))
196+ *parserEx> test2 "123"
197+ Left (Error "Unrecognised token"
198+ [MkToken 0
199+ 0
200+ (Number 123)]) : Either (ParseError (TokenData ExpressionToken))
201+ (Integer,
202+ List (TokenData ExpressionToken))
203+
204+Now we have two Grammars we can try combining them. The following test looks
205+for ``openParen`` followed by ``intLiteral``, the two Grammars are combined using
206+``<*>``. The ``map const`` part uses the integer value from the first.
207+
208+The following test is looking for ``(`` followed by a number:
209+
210+.. code-block:: idris
211+
212+ test3 : String -> Either (ParseError (TokenData ExpressionToken))
213+ (Integer, List (TokenData ExpressionToken))
214+ test3 s = parse (map const openParen <*> intLiteral) (fst (lex expressionTokens s))
215+
216+We can see below that ``(`` followed by a number is successfully parsed but, as
217+required, other token lists are not:
218+
219+.. code-block:: idris
220+
221+ *parserEx> test3 "(123"
222+ Right (0, []) : Either (ParseError (TokenData ExpressionToken))
223+ (Integer, List (TokenData ExpressionToken))
224+ *parserEx> test3 "(("
225+ Left (Error "Unrecognised token"
226+ [MkToken 0
227+ (case fspan (\ARG => not (intToBool (prim__eqChar ARG '\n')))
228+ "(" of
229+ (incol, "") => c + cast (length incol)
230+ (incol, b) => cast (length incol))
231+ OParen]) : Either (ParseError (TokenData ExpressionToken))
232+ (Integer, List (TokenData ExpressionToken))
233+
234+ *parserEx> test3 "123"
235+ Left (Error "Unrecognised token"
236+ [MkToken 0
237+ 0
238+ (Number 123)]) : Either (ParseError (TokenData ExpressionToken))
239+ (Integer,
240+ List (TokenData ExpressionToken))
241+ *parserEx> test3 "123("
242+ Left (Error "Unrecognised token"
243+ [MkToken 0 0 (Number 123),
244+ MkToken 0
245+ (case fspan (\ARG => not (intToBool (prim__eqChar ARG '\n')))
246+ "321" of
247+ (incol, "") => c + cast (length incol)
248+ (incol, b) => cast (length incol))
249+ OParen]) : Either (ParseError (TokenData ExpressionToken))
250+ (Integer, List (TokenData ExpressionToken))
251+
252+.. list-table::
253+
254+ * - The closing parenthesis is constructed in the same way.
255+
256+ - .. code-block:: idris
257+
258+ closeParen : Rule Integer
259+ closeParen = terminal (\x => case tok x of
260+ CParen => Just 0
261+ _ => Nothing)
262+
263+.. list-table::
264+
265+ * - Now we can generate a Grammar for an expression inside parenthesis
266+ like this.
267+
268+ - .. code-block:: idris
269+
270+ paren : Rule Integer -> Rule Integer
271+ paren exp = openParen *> exp <* closeParen
272+
273+The use of ``*>`` and ``<*`` instead of ``<*>`` is an easy way to use the integer
274+value from the inner expression.
275+
276+So lets try to use this to define a grammar which recognises either:
277+
278+- An integer literal
279+- An integer literal inside parenthesis
280+- An integer literal inside parenthesis inside parenthesis
281+- ... and so on.
282+
283+.. list-table::
284+
285+ * - This requires a recursively defined structure like this:
286+
287+ - .. code-block:: idris
288+
289+ partial
290+ expr : Rule Integer
291+ expr = intLiteral <|> (paren expr)
292+
293+This is a valid grammar because every time it is called it is guaranteed to
294+consume a token. However, as an Idris structure, it is problematic due to
295+the recursion. Defining it as partial allows it to compile but at runtime
296+we are likely to get a crash with an (unhelpful) error message like
297+``killed by signal 11``.
298+
299+So a better method is to use ``do`` notation as described in the following
300+section.
301+
302+Monadic Combinator
303+------------------
304+
305+In addition to ``<|>`` and ``<*>`` there is a ``>>=`` combinator, which is
306+defined like this:
307+
308+.. code-block:: idris
309+
310+ ||| Sequence two grammars. If either consumes some input, the sequence is
311+ ||| guaranteed to consume some input. If the first one consumes input, the
312+ ||| second is allowed to be recursive (because it means some input has been
313+ ||| consumed and therefore the input is smaller)
314+ export %inline
315+ (>>=) : {c1 : Bool} ->
316+ Grammar tok c1 a ->
317+ inf c1 (a -> Grammar tok c2 b) ->
318+ Grammar tok (c1 || c2) b
319+ (>>=) {c1 = False} = SeqEmpty
320+ (>>=) {c1 = True} = SeqEat
321+
322+.. list-table::
323+
324+ * - This allows us to use ``do`` notation for the previous parenthesis example:
325+
326+ - .. code-block:: idris
327+
328+ expr = intLiteral <|> do
329+ openParen
330+ r <- expr
331+ closeParen
332+ pure r
333+
334+This can be more flexible than using the ``<*>`` operator. Also it is defined
335+using ``Inf`` so we can implement recursively defined grammars as above.
336+
337+Implementing the Arithmetic Operators
338+-------------------------------------
339+
340+.. list-table::
341+
342+ * - Now for the operations, in this case: ``+``, ``-`` and ``*``.
343+ The syntax we require for these infix operators
344+ would require recursive grammars like this:
345+
346+ - .. code-block:: idris
347+
348+ expr = expr (op "+") expr
349+
350+As already explained, ``do`` notation can allow us to use recursive
351+definitions but not necessarily left-recursion like this.
352+
353+In order to work up to this gradually lets start with prefix operators
354+(sometimes known as Polish notation) then modify later for infix operators.
355+
356+.. list-table::
357+
358+ * - So prefix operators would have this sort of form:
359+
360+ - .. code-block:: idris
361+
362+ expr = (add (op "+") expr expr)
363+
364+where ``op`` is defined like this:
365+
366+.. code-block:: idris
367+
368+ ||| Matches if this is an operator token and string matches, that is,
369+ ||| it is the required type of operator.
370+ op : String -> Rule Integer
371+ op s = terminal (\x => case tok x of
372+ (Operator s1) => if s==s1 then Just 0 else Nothing
373+ _ => Nothing)
374+
375+.. list-table::
376+
377+ * - and ``add`` is defined like this:
378+
379+ Where:
380+
381+ - x is the add operator.
382+ - y is the first operand.
383+ - z is the second operand.
384+
385+ - .. code-block:: idris
386+
387+ addInt : Integer -> Integer -> Integer
388+ addInt a b = a+b
389+
390+ export
391+ add : Grammar tok c1 Integer ->
392+ Grammar tok c2 Integer ->
393+ Grammar tok c3 Integer ->
394+ Grammar tok ((c1 || c2) || c3) Integer
395+ add x y z = map addInt (x *> y) <*> z
396+
397+
398+
399+The resulting integer will be the sum of the two operands.
400+
401+.. list-table::
402+
403+ * - The other operators are defined in a similar way:
404+
405+ - .. code-block:: idris
406+
407+ subInt : Integer -> Integer -> Integer
408+ subInt a b = a-b
409+
410+ export
411+ sub : Grammar tok c1 Integer ->
412+ Grammar tok c2 Integer ->
413+ Grammar tok c3 Integer ->
414+ Grammar tok ((c1 || c2) || c3) Integer
415+ sub x y z = map subInt (x *> y) <*> z
416+
417+ multInt : Integer -> Integer -> Integer
418+ multInt a b = a*b
419+
420+ export
421+ mult : Grammar tok c1 Integer ->
422+ Grammar tok c2 Integer ->
423+ Grammar tok c3 Integer ->
424+ Grammar tok ((c1 || c2) || c3) Integer
425+ mult x y z = map multInt (x *> y) <*> z
426+
427+So the top level ``Grammar`` can now be defined as follows. Note that this is
428+partial as it is a potentially infinite structure and so not total.
429+
430+.. code-block:: idris
431+
432+ partial
433+ expr : Rule Integer
434+ expr = (add (op "+") expr expr)
435+ <|> (sub (op "-") expr expr)
436+ <|> (mult (op "*") expr expr)
437+ <|> intLiteral <|> (paren expr)
438+
439+.. list-table::
440+
441+ * - To make the testing easier we can use this function:
442+
443+ - .. code-block:: idris
444+
445+ partial
446+ test : String -> Either (ParseError (TokenData ExpressionToken))
447+ (Integer, List (TokenData ExpressionToken))
448+ test s = parse expr (fst (lex expressionTokens s))
449+
450+.. list-table::
451+
452+ * - First test a valid (prefix) expression:
453+
454+ - .. code-block:: idris
455+
456+ *parserEx> test "+1*6(4)"
457+ Right (25,
458+ []) : Either (ParseError (TokenData ExpressionToken))
459+ (Integer, List (TokenData ExpressionToken))
460+
461+Then an invalid syntax:
462+
463+.. code-block:: idris
464+
465+ *parserEx> test "))"
466+ Left (Error "Unrecognised token"
467+ [MkToken 0 0 CParen,
468+ MkToken 0
469+ (case fspan (\ARG =>
470+ not (intToBool (prim__eqChar ARG
471+ '\n')))
472+ ")" of
473+ (incol, "") => c + cast (length incol)
474+ (incol, b) => cast (length incol))
475+ CParen]) : Either (ParseError (TokenData ExpressionToken))
476+ (Integer,
477+ List (TokenData ExpressionToken))
478+
479+However if we try something that is invalid, but starts with a valid token,
480+then it will return ``Right`` (to indicate success)
481+
482+.. code-block:: idris
483+
484+ *parserEx> test "1))"
485+ Right (1,
486+ [MkToken 0
487+ (case fspan (\ARG =>
488+ not (intToBool (prim__eqChar ARG '\n')))
489+ "1" of
490+ (incol, "") => c + cast (length incol)
491+ (incol, b) => cast (length incol))
492+ CParen,
493+ MkToken 0
494+ (case fspan (\ARG =>
495+ not (intToBool (prim__eqChar ARG '\n')))
496+ ")" of
497+ (incol, "") => c + cast (length incol)
498+ (incol, b) => cast (length incol))
499+ CParen]) : Either (ParseError (TokenData ExpressionToken))
500+ (Integer,
501+ List (TokenData ExpressionToken))
502+
503+Infix Notation
504+--------------
505+
506+So far we have implemented a prefix notation for operators (like this:
507+``+ expr expr``) but the aim is to implemented an infix notation (like this:
508+``expr + expr``). To do this we must be able to deal with potentially
509+infinite data structures (see Codata Types here :ref:`sect-typefuns`).
510+
511+First alter the grammar to have infix operations:
512+
513+.. code-block:: idris
514+
515+ addInt : Integer -> Integer -> Integer
516+ addInt a b = a+b
517+
518+ export
519+ add : Grammar tok c1 Integer ->
520+ Grammar tok c2 Integer ->
521+ Grammar tok c3 Integer ->
522+ Grammar tok ((c1 || c2) || c3) Integer
523+ add x y z = map addInt (x <* y) <*> z
524+
525+ subInt : Integer -> Integer -> Integer
526+ subInt a b = a-b
527+
528+ export
529+ sub : Grammar tok c1 Integer ->
530+ Grammar tok c2 Integer ->
531+ Grammar tok c3 Integer ->
532+ Grammar tok ((c1 || c2) || c3) Integer
533+ sub x y z = map subInt (x <* y) <*> z
534+
535+
536+ multInt : Integer -> Integer -> Integer
537+ multInt a b = a*b
538+
539+ export
540+ mult : Grammar tok c1 Integer ->
541+ Grammar tok c2 Integer ->
542+ Grammar tok c3 Integer ->
543+ Grammar tok ((c1 || c2) || c3) Integer
544+ mult x y z = map multInt (x <* y) <*> z
545+
546+ partial
547+ expr : Rule Integer
548+ expr = (add expr (op "+") expr)
549+ <|> (sub expr (op "-") expr)
550+ <|> (mult expr (op "*") expr)
551+ <|> intLiteral <|> (paren expr)
552+
553+However, if this was run, the code would not terminate.
554+
555+Implement Left Recursion Elimination
556+------------------------------------
557+
558+Left factoring, like this, is a general problem.
559+
560+If we have a rule like this:
561+
562+.. code-block:: idris
563+
564+ A -> (x<*>y) <|> (x<*>z)
565+
566+If ``x<*>y`` fails but ``x<*>z`` would succeed a problem is that, ``x<*>y`` has
567+already consumed ``x``, so now ``x<*>z`` will fail.
568+
569+so we could write code to backtrack. That is ``try`` ``x<*>y`` without consuming
570+so that, if the first token succeeds but the following tokens fail, then the
571+first tokens would not be consumed.
572+
573+Another approach is left factoring:
574+
575+Left Factoring
576+--------------
577+
578+Replace the rule with two rules (that is we add a non-terminal symbol) so
579+for example, instead of:
580+
581+.. code-block:: idris
582+
583+ A -> (x<*>y) <|> (x<*>z)
584+
585+we add an extra rule to give:
586+
587+.. code-block:: idris
588+
589+ A -> x<*>N
590+ N -> y <|> z
591+
592+That is we convert a general context-free grammar to a LL(1) grammar. Although
593+not every context-free grammar can be converted to a LL(1) grammar.
594+
595+This still does not solve the infinite recursion issue and there is another
596+problem: the precedence of the operators ``+``, ``-`` and ``*`` is not explicit.
597+
598+.. list-table::
599+
600+ * - To resolve this we can alter the example to have a BNF like this:
601+ Where braces ``{ ... }`` mean the contents can occur 1 or more times.
602+
603+ - .. code-block:: idris
604+
605+ 'expression' ::= ('+'|'-') 'term' {('+'|'-') 'term'}
606+
607+ 'term' ::= 'factor' {'*' 'factor'}
608+
609+ 'factor' ::=
610+ number
611+ | '(' 'expression' ')'
612+
613+
614+.. code-block:: idris
615+
616+ expr : Rule Integer
617+
618+ factor : Rule Integer
619+ factor = intLiteral <|> do
620+ openParen
621+ r <- expr
622+ closeParen
623+ pure r
624+
625+ term : Rule Integer
626+ term = map multInt factor <*> (
627+ (op "*")
628+ *> factor)
629+ <|> factor
630+
631+ expr = map addInt term <*> (
632+ (op "+")
633+ *> term)
634+ <|> map subInt term <*> (
635+ (op "-")
636+ *> term)
637+ <|> term
638+
639+ calc : String -> Either (ParseError (TokenData ExpressionToken))
640+ (Integer, List (TokenData ExpressionToken))
641+ calc s = parse expr (fst (lex expressionTokens s))
642+
643+ lft : (ParseError (TokenData ExpressionToken)) -> IO ()
644+ lft (Error s lst) = putStrLn ("error:"++s)
645+
646+ rht : (Integer, List (TokenData ExpressionToken)) -> IO ()
647+ rht i = putStrLn ("right " ++ (show i))
648+
649+ main : IO ()
650+ main = do
651+ putStr "alg>"
652+ x <- getLine
653+ either lft rht (calc x) -- eliminator for Either
654+
655+As the following tests show, this now handles infix operators and precedence.
656+
657+.. list-table::
658+
659+ * - For example '*' is an infix operator:
660+
661+ - .. code-block:: idris
662+
663+ *algebraREPL> :exec
664+ alg>2*3
665+ right (6, [])
666+
667+ * - Check that atomic number literals work:
668+
669+ - .. code-block:: idris
670+
671+ *algebraREPL> :exec
672+ alg>2
673+ right (2, [])
674+
675+ * - Check that '*' has a higher precedence than '+'.
676+
677+ - .. code-block:: idris
678+
679+ *algebraREPL> :exec
680+ alg>2+3*4
681+ right (14, [])
682+
683+ * - Also '*' has a higher precedence than '+' when the order is reversed.
684+
685+ - .. code-block:: idris
686+
687+ *algebraREPL> :exec
688+ alg>3*4+2
689+ right (14, [])
690+
691+ * - Also precedence can be overridden by parenthesis.
692+
693+ - .. code-block:: idris
694+
695+ *algebraREPL> :exec
696+ alg>(2+3)*4
697+ right (20, [])
698+
699+This is still not correct because it does not correctly parse multiple sums or terms
700+like ``1+2+3`` or ``1*2*3``.
docs/parserLibrary/whitespace.rstnew file+250
@@ -0,0 +1,250 @@
1+.. _parserLibraryWhitespace:
2+
3+Whitespace and Comments
4+=======================
5+
6+The previous two pages introduced the lexer and parser but have not yet
7+discussed how to handle whitespace and comments.
8+
9+In some grammars whitespace and comments would not be considered significant and
10+so we might be tempted not to generate any tokens for them. However, in the
11+running example, we may want to make spaces significant in the future. For
12+example, we might want to implement function application expressed by
13+juxtaposition as in Haskell and Idris like this: ``f x``.
14+
15+So, on this page, we will add a token for whitespace and comments. We will
16+then consider two ways to process this:
17+
18+- Filter all whitespace tokens from the lexer results before passing to
19+ the parser.
20+- Process the whitespace tokens in the parser.
21+
22+Whitespace and Comments in Lexer
23+--------------------------------
24+
25+To start with we can use the same token for both whitespace and comments. Here
26+it is called ``Comment`` and added to the ``ExpressionToken`` data structure
27+like this:
28+
29+.. code-block:: idris
30+
31+ public export
32+ data ExpressionToken = Number Integer
33+ | Operator String
34+ | OParen
35+ | CParen
36+ | Comment String
37+ | EndInput
38+
39+This is added to the ``TokenMap`` like this:
40+
41+.. code-block:: idris
42+
43+ ||| from https://github.com/edwinb/Idris2/blob/master/src/Parser/Lexer.idr
44+ comment : Lexer
45+ comment = is '-' <+> is '-' <+> many (isNot '\n')
46+
47+ expressionTokens : TokenMap ExpressionToken
48+ expressionTokens =
49+ [(digits, \x => Number (toInt' x)),
50+ (operator, \x => Operator x),
51+ (is '(' ,\x => OParen),
52+ (is ')' ,\x => CParen),
53+ (spaces, Comment),
54+ (comment, Comment)]
55+
56+As you can see, the comment is defined like a single line Idris comment,
57+it starts with ``--`` and continues for the remainder of the line.
58+
59+We don't need to define ``spaces`` because it is already defined in
60+: https://github.com/idris-lang/Idris-dev/blob/master/libs/contrib/Text/Lexer.idr
61+like this:
62+
63+.. code-block:: idris
64+
65+ ||| Recognise a single whitespace character
66+ ||| /\\s/
67+ space : Lexer
68+ space = pred isSpace
69+
70+ ||| Recognise one or more whitespace characters
71+ ||| /\\s+/
72+ spaces : Lexer
73+ spaces = some space
74+
75+If these whitespace tokens are not significant, that is, they can appear
76+anywhere and they are optional then we can filter them out before the parser
77+gets them like this:
78+
79+.. code-block:: idris
80+
81+ processWhitespace : (List (TokenData ExpressionToken), Int, Int, String)
82+ -> (List (TokenData ExpressionToken), Int, Int, String)
83+ processWhitespace (x,l,c,s) = ((filter notComment x),l,c,s) where
84+ notComment : TokenData ExpressionToken -> Bool
85+ notComment t = case tok t of
86+ Comment _ => False
87+ _ => True
88+
89+ calc : String -> Either (ParseError (TokenData ExpressionToken))
90+ (Integer, List (TokenData ExpressionToken))
91+ calc s = parse expr (fst (processWhitespace (lex expressionTokens s)))
92+
93+
94+Whitespace and Comments in Parser
95+---------------------------------
96+
97+If we sometimes require whitespace to be significant then we can't filter
98+them out as above. In this case the ``Comment`` tokens are sent to the parser
99+which now needs to be able to handle them.
100+
101+.. code-block:: idris
102+
103+ commentSpace : Rule Integer
104+ commentSpace = terminal (\x => case tok x of
105+ Comment s => Just 0
106+ _ => Nothing)
107+
108+So far we don't have any syntax that requires spaces to be significant so we
109+need to define the grammar so that it will parse with, or without, spaces.
110+This needs to be done in a systematic way, here I have defined the grammar so
111+that there is an optional space to the right of every atom or operator.
112+First add versions of ``intLiteral`` , ``openParen`` , ``closeParen``
113+and ``op`` that allow optional spaces/comments to the right of them:
114+
115+.. code-block:: idris
116+
117+ intLiteralC : Rule Integer
118+ intLiteralC = (intLiteral <* commentSpace) <|> intLiteral
119+
120+ openParenC : Rule Integer
121+ openParenC = (openParen <* commentSpace) <|> openParen
122+
123+ closeParenC : Rule Integer
124+ closeParenC = (closeParen <* commentSpace) <|> closeParen
125+
126+ ||| like op but followed by optional comment or space
127+ opC : String -> Rule Integer
128+ opC s = ((op s) <* commentSpace) <|> (op s)
129+
130+Then just use these functions instead of the original functions:
131+
132+.. code-block:: idris
133+
134+ expr : Rule Integer
135+
136+ factor : Rule Integer
137+ factor = intLiteralC <|> do
138+ openParenC
139+ r <- expr
140+ closeParenC
141+ pure r
142+
143+ term : Rule Integer
144+ term = map multInt factor <*> (
145+ (opC "*")
146+ *> factor)
147+ <|> factor
148+
149+ expr = map addInt term <*> (
150+ (opC "+")
151+ *> term)
152+ <|> map subInt term <*> (
153+ (opC "-")
154+ *> term)
155+ <|> term
156+
157+ calc : String -> Either (ParseError (TokenData ExpressionToken))
158+ (Integer, List (TokenData ExpressionToken))
159+ calc s = parse expr (fst (lex expressionTokens s))
160+
161+ lft : (ParseError (TokenData ExpressionToken)) -> IO ()
162+ lft (Error s lst) = putStrLn ("error:"++s)
163+
164+ rht : (Integer, List (TokenData ExpressionToken)) -> IO ()
165+ rht i = putStrLn ("right " ++ (show i))
166+
167+ main : IO ()
168+ main = do
169+ putStr "alg>"
170+ x <- getLine
171+ either lft rht (calc x) -- eliminator for Either
172+
173+
174+Defining Block Structure using Indents
175+--------------------------------------
176+
177+Many languages such as Python, Haskell and Idris use indents to delimit
178+the block structure of the language.
179+
180+We can see how Idris2 does it here
181+: https://github.com/edwinb/Idris2/blob/master/src/Parser/Support.idr
182+
183+.. code-block:: idris
184+
185+ export
186+ IndentInfo : Type
187+ IndentInfo = Int
188+
189+ export
190+ init : IndentInfo
191+ init = 0
192+
193+EndInput Token
194+--------------
195+
196+So far, the parser will return a successful result even if the full input
197+is not consumed. To ensure that the top level syntax is fully matched we
198+add a ``EndInput`` token to indicate the last token.
199+
200+``EndInput`` is added to the other tokens like this:
201+
202+.. code-block:: idris
203+
204+ data ExpressionToken = Number Integer
205+ | Operator String
206+ | OParen
207+ | CParen
208+ | Comment String
209+ | EndInput
210+
211+A rule to consume this token is added:
212+
213+.. code-block:: idris
214+
215+ eoi : Rule Integer
216+ eoi = terminal (\x => case tok x of
217+ EndInput => Just 0
218+ _ => Nothing)
219+
220+Instead of using ``expr`` at the top level of the syntax we can now define
221+``exprFull`` as shown here. This will make sure that only when ``EndInput``
222+is consumed will the parse be successful:
223+
224+.. code-block:: idris
225+
226+ exprFull : Rule Integer
227+ exprFull = expr <* eoi
228+
229+The following code makes sure ``EndInput`` is added to the end of the token
230+list:
231+
232+.. code-block:: idris
233+
234+ processWhitespace : (List (TokenData ExpressionToken), Int, Int, String)
235+ -> (List (TokenData ExpressionToken), Int, Int, String)
236+ processWhitespace (x,l,c,s) = ((filter notComment x)++
237+ [MkToken l c EndInput],l,c,s) where
238+ notComment : TokenData ExpressionToken -> Bool
239+ notComment t = case tok t of
240+ Comment _ => False
241+ _ => True
242+
243+All we have to do now is use ``exprFull`` instead of ``expr``:
244+
245+.. code-block:: idris
246+
247+ calc : String -> Either (ParseError (TokenData ExpressionToken))
248+ (Integer, List (TokenData ExpressionToken))
249+ calc s = parse exprFull (fst (processWhitespace (lex expressionTokens s)))
250+
docs/proofs/definitional.rstnew file+235
@@ -0,0 +1,235 @@
1+*******************
2+Background Material
3+*******************
4+
5+In order to understand how to write proofs in Idris I think its worth clarifying some fundamentals, such as,
6+
7+- Propositions and judgments
8+- Boolean and constructive logic
9+- Curry-Howard correspondence
10+- Definitional and propositional equalities
11+- Axiomatic and constructive approaches
12+
13+Propositions and Judgments
14+==========================
15+
16+Propositions are the subject of our proofs, before the proof then we can't formally say if they are true or not. If the proof is successful then the result is a 'judgment'.
17+For instance, if the ``proposition`` is,
18+
19++-------+
20+| 1+1=2 |
21++-------+
22+
23+When we prove it, the ``judgment`` is,
24+
25++------------+
26+| 1+1=2 true |
27++------------+
28+
29+Or if the ``proposition`` is,
30+
31++-------+
32+| 1+1=3 |
33++-------+
34+
35+Obviously we can't prove it is true, but it is still a valid proposition and perhaps we can prove it is false so the ``judgment`` is,
36+
37++-------------+
38+| 1+1=3 false |
39++-------------+
40+
41+This may seem a bit pedantic but it is important to be careful, in mathematics not every proposition is true or false for instance, a proposition may be unproven or even unprovable.
42+
43+So the logic here is different from the logic that comes from boolean algebra. In that case what is not true is false and what is not false is true. The logic we are using here does not have this 'law of excluded middle' so we have to be careful not to use it.
44+
45+A false proposition is taken to be a contradiction and if we have a contradiction then we can prove anything, so we need to avoid this. Some languages, used in proof assistants, prevent contradictions but such languages cannot be Turing complete, so Idris does not prevent contradictions.
46+
47+The logic we are using is called constructive (or sometimes intuitional) because we are constructing a 'database' of judgments.
48+
49+There are also many other types of logic, another important type of logic for Idris programmers is '``linear logic``' but that's not discussed on this page.
50+
51+Curry-Howard correspondence
52+===========================
53+
54+So how to we relate these proofs to Idris programs? It turns out that there is a correspondence between constructive logic and type theory. They are the same structure and we can switch backward and forward between the two notations because they are the same thing.
55+
56+The way that this works is that a proposition is a type so this,
57+
58+.. code-block:: idris
59+
60+ Idris> 1+1=2
61+ 2 = 2 : Type
62+
63+is a proposition and it is also a type. This is built into Idris so when an '=' equals sign appears in a function type an equality type is generated. The following will also produce an equality type:
64+
65+
66+.. code-block:: idris
67+
68+ Idris> 1+1=3
69+ 2 = 3 : Type
70+
71+Both of these are valid propositions so both are valid equality types. But how do we represent true judgment, that is, how do we denote 1+1=2 is true but not 1+1=3.
72+A type that is true is inhabited, that is, it can be constructed. An equality type has only one constructor 'Refl' so a proof of 1+1=2 is
73+
74+.. code-block:: idris
75+
76+ onePlusOne : 1+1=2
77+ onePlusOne = Refl
78+
79+So how can Refl, which is a constructor without any parameters, construct an equality type? If we type it on its own then it can't:
80+
81+.. code-block:: idris
82+
83+ Idris> Refl
84+ (input):Can't infer argument A to Refl, Can't infer argument x to Refl
85+
86+So it must pattern match on its return type:
87+
88+.. code-block:: idris
89+
90+ Idris> the (1=1) Refl
91+ Refl : 1 = 1
92+
93+So now that we can represent propositions as types other aspects of propositional logic can also be translated to types as follows:
94+
95++----------+-------------------+--------------------------+
96+| | propositions | example of possible type |
97++----------+-------------------+--------------------------+
98+| A | x=y | |
99++----------+-------------------+--------------------------+
100+| B | y=z | |
101++----------+-------------------+--------------------------+
102+| and | A /\\ B | ``Pair(x=y,y=z)`` |
103++----------+-------------------+--------------------------+
104+| or | A \\/ B | ``Either(x=y,y=z)`` |
105++----------+-------------------+--------------------------+
106+| implies | A -> B | ``(x=y) -> (y=x)`` |
107++----------+-------------------+--------------------------+
108+| for all | y=z | |
109++----------+-------------------+--------------------------+
110+| exists | y=z | |
111++----------+-------------------+--------------------------+
112+
113+
114+And (conjunction)
115+-----------------
116+
117+We can have a type which corresponds to conjunction:
118+
119+.. code-block:: idris
120+
121+ AndIntro : a -> b -> A a b
122+
123+There is a built in type called 'Pair'.
124+
125+Or (disjunction)
126+----------------
127+
128+We can have a type which corresponds to disjunction:
129+
130+.. code-block:: idris
131+
132+ data Or : Type -> Type -> Type where
133+ OrIntroLeft : a -> A a b
134+ OrIntroRight : b -> A a b
135+
136+There is a built in type called 'Either'.
137+
138+Definitional and Propositional Equalities
139+=========================================
140+
141+We have seen that we can 'prove' a type by finding a way to construct a term. In the case of equality types there is only one constructor which is 'Refl'.
142+We have also seen that each side of the equation does not have to be identical like '2=2'. It is enough that both sides are ``definitionaly equal`` like this:
143+
144+.. code-block:: idris
145+
146+ onePlusOne : 1+1=2
147+ onePlusOne = Refl
148+
149+So both sides of this equation nomalise to 2 and so Refl will type match and the proposition is proved.
150+
151+We don't have to stick to terms, can also use symbolic parameters so the following will compile:
152+
153+.. code-block:: idris
154+
155+ varIdentity : m = m
156+ varIdentity = Refl
157+
158+If a proposition/equality type is not definitionaly equal but is still true then it is ``propositionaly equal``. In this case we may still be able to prove it but some steps in the proof may require us to add something into the terms or at least to take some sideways steps to get to a proof.
159+
160+Especially when working with equalities containing variable terms (inside functions) it can be hard to know which equality types are definitially equal, in this example plusReducesL is '``definitially equal``' but plusReducesR is not (although it is '``propositionaly equal``'). The only difference between them is the order of the operands.
161+
162+.. code-block:: idris
163+
164+ plusReducesL : (n:Nat) -> plus Z n = n
165+ plusReducesL n = Refl
166+
167+ plusReducesR : (n:Nat) -> plus n Z = n
168+ plusReducesR n = Refl
169+
170+plusReducesR gives the following error:
171+
172+
173+.. code-block:: idris
174+
175+ - + Errors (1)
176+ `-- proof.idr line 6 col 17:
177+ When checking right hand side of plusReducesR with expected type
178+ plus n 0 = n
179+
180+ Type mismatch between
181+ n = n (Type of Refl)
182+ and
183+ plus n 0 = n (Expected type)
184+
185+ Specifically:
186+ Type mismatch between
187+ n
188+ and
189+ plus n 0
190+
191+So why is 'Refl' able to prove some equality types but not others?
192+
193+The first answer is that 'plus' is defined in such a way that it splits on its first argument so it is simple to prove when 0 is the first argument but not the second. So what is the general way to know if Refl will work?
194+
195+If an equality type can be proved/constructed by using Refl alone it is known as a ``definitional equality``. In order to be definitinally equal both sides of the equation must normalise to unique values. That is, each step in the proof must reduce the term so each step is effectively forced.
196+
197+So when we type 1+1 in Idris it is immediately converted to 2 because definitional equality is built in.
198+
199+.. code-block:: idris
200+
201+ Idris> 1+1
202+ 2 : Integer
203+
204+In the following pages we discuss how to resolve propositionaly equalies.
205+
206+Axiomatic and Constructive Approaches
207+=====================================
208+
209+How should we define types so that we can do proofs on them? In the natural numbers with the plus example we could have started by treating it as a group based on the plus operator. So we have axioms:
210+
211+- for all x,y : ``x+y=y+x``
212+- for all x: ``x + 0 = x = 0 + x``
213+- for all x,y,z: ``(x + y) + z = x + (x + z)``
214+
215+Then we can implement '+' so that it respects these axioms (presumably implemented in hardware).
216+
217+These are axioms, that is a propositions/types that are asserted to be true without proof. In Idris we can use the 'postulate' keyword
218+
219+
220+.. code-block:: idris
221+
222+ postulate commutePlus: (x:Nat) -> (y:Nat) -> plus x y = plus y x
223+
224+Alternatively we could define the natural numbers based on Zero and Successor. The axioms above then become derived rules and we also gain the ability to do inductive proofs.
225+
226+As we know, Idris uses both of these approaches with automatic coercion between them which gives the best of both worlds.
227+
228+So what can we learn from this to implement our own types:
229+
230+- Should we try to implement both approaches?
231+- Should we define our types by constructing up from primitive types?
232+
233+Proof theory affects these design decisions.
234+
235+
docs/proofs/index.rst+5−2
@@ -4,7 +4,7 @@
44Theorem Proving
55###############
66
7−A tutorial on theorem proving in Idris.
7+A tutorial on theorem proving in Idris.
88
99.. note::
1010
@@ -13,13 +13,16 @@ A tutorial on theorem proving in Idris.
1313 Idris Community* has waived all copyright and related or neighboring
1414 rights to Documentation for Idris.
1515
16− More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
16+ More information concerning the CC0 can be found online at: https://creativecommons.org/publicdomain/zero/1.0/
1717
1818.. toctree::
1919 :maxdepth: 1
2020
21+ definitional
2122 pluscomm
2223 inductive
2324 patterns
25+ propositional
2426 interactive
27+ interactiveOld
2528
docs/proofs/inductive.rst+3−1
@@ -1,3 +1,5 @@
1+.. _sect-inductive:
2+
13****************
24Inductive Proofs
35****************
@@ -13,7 +15,7 @@ numbers. Recall that they are defined recursively, as follows:
1315 S : Nat -> Nat
1416
1517A *total* function over natural numbers must both terminate, and cover
16−all possible inputs. Idris checks functions for totality by cheking that
18+all possible inputs. Idris checks functions for totality by checking that
1719all inputs are covered, and that all recursive calls are on
1820*structurally smaller* values (so recursion will always reach a base
1921case). Recalling ``plus``:
docs/proofs/interactive.rst+222−91
@@ -2,10 +2,101 @@
22Interactive Theorem Proving
33***************************
44
5−Idris also supports interactive theorem proving via tactics. This
6−is generally not recommended to be used directly, but rather used as a
7−mechanism for building proof automation which is beyond the scope of this
8−tutorial. In this section, we briefly discus tactics.
5+Idris supports interactive theorem proving via elaborator reflection.
6+
7+:ref:`elaborator-reflection` is also used to convert high-level Idris code into
8+the core language and for customising the language. Here we show how to use it
9+to interactively construct proofs.
10+
11+The primary purpose of the elaboration mechanism is to elaborate Idris and so it
12+is not optimised to work as a proof assistant, however it can interactively
13+construct proofs as described on this page.
14+
15+Elab and Pruviloj Libraries
16+===========================
17+
18+Elaborator reflection is defined in ``prelude/Language/Reflection/Elab.idr``
19+and ``pruviloj`` is defined in ``Idris-dev/libs/pruviloj/``.
20+
21+``Elab`` defines the basics such as: ``solve``, ``attack``, ``intro``, ``compute``,
22+``rewriteWith`` and others.
23+``pruviloj`` defines some more advanced derived commands such as:
24+``reflexivity`` and others.
25+
26+To use ``pruviloj`` call Idris with the ``-p pruviloj`` option and add:
27+
28+.. code-block:: idris
29+
30+ import Pruviloj
31+ import Pruviloj.Induction
32+
33+to the top of your file.
34+
35+It is useful to get the docs at the REPL by using the ``:doc`` command, and
36+search the docstrings using ``:apropos``. So to introduce the functions from
37+``Elab`` and ``Pruviloj``, that we will need for the following example, here are
38+their docstrings:
39+
40+.. code-block:: idris
41+
42+ *plusReducesZ> :doc solve
43+ Language.Reflection.Elab.Tactics.solve : Elab ()
44+ Substitute a guess into a hole.
45+
46+.. code-block:: idris
47+
48+ *plusReducesZ> :doc attack
49+ Language.Reflection.Elab.Tactics.attack : Elab ()
50+ Convert a hole to make it suitable for bindings - that is, transform
51+ it such that it has the form ?h : t . h as opposed to ?h : t . f h.
52+
53+ The binding tactics require that a hole be directly under its binding,
54+ or else the scopes of the generated terms won't make sense. This
55+ tactic creates a new hole of the proper form, and points the old hole
56+ at it.
57+
58+.. code-block:: idris
59+
60+ *plusReducesZ> :doc intro
61+ Language.Reflection.Elab.Tactics.intro : (n : TTName) -> Elab ()
62+ Introduce a lambda binding around the current hole and focus on the
63+ body. Requires that the hole be in binding form (use attack).
64+ Arguments:
65+ n : TTName -- the name to use for the argument
66+
67+.. code-block:: idris
68+
69+ *plusReducesZ> :doc compute
70+ Language.Reflection.Elab.Tactics.compute : Elab ()
71+ Normalise the goal.
72+
73+.. code-block:: idris
74+
75+ *plusReducesZ> :doc rewriteWith
76+ Language.Reflection.Elab.Tactics.rewriteWith : Raw -> Elab ()
77+ Attempt to rewrite the goal using an equality.
78+
79+ The tactic searches the goal for applicable subterms, and constructs a
80+ context for replace using them. In some cases, this is not possible,
81+ and replace must be called manually with an appropriate context.
82+
83+ Because this tactic internally introduces a let binding, it requires
84+ that the hole be immediately under its binder (use attack if it might
85+ not be).
86+
87+Here is the command from ``pruviloj`` that we will need for the example on
88+this page:
89+
90+.. code-block:: idris
91+
92+ *plusReducesZ> :doc reflexivity
93+ Pruviloj.Core.reflexivity : Elab ()
94+ A special-purpose tactic that attempts to solve a goal using Refl.
95+ This is useful for ensuring that goals in fact are trivial when
96+ developing or testing other tactics; otherwise, consider using search.
97+
98+Interactive Example: plusReduces
99+================================
9100
10101One way to write proofs interactively is to write the general *structure* of
11102the proof, and use the interactive mode to complete the details.
@@ -21,145 +112,185 @@ hypothesis, and insert *holes* for the rest of the definition:
21112
22113.. code-block:: idris
23114
115+ import Pruviloj
116+ import Pruviloj.Induction
117+
24118 plusReducesZ' : (n:Nat) -> n = plus n Z
25119 plusReducesZ' Z = ?plusredZ_Z
26120 plusReducesZ' (S k) = let ih = plusReducesZ' k in
27121 ?plusredZ_S
28122
29123On running , two global names are created, ``plusredZ_Z`` and
30−``plusredZ_S``, with no definition. We can use the ``:m`` command at the
31−prompt to find out which holes are still to be solved (or, more
32−precisely, which functions exist but have no definitions), then the
33−``:t`` command to see their types:
124+``plusredZ_S``, with no definition.
34125
35126.. code-block:: idris
36127
37− *theorems> :m
38− Global holes:
39− [plusredZ_S,plusredZ_Z]
128+ *theorems> : idris plusReducesZ.idr -p pruviloj
40129
41−.. code-block:: idris
130+ . / _/___/ /____(_)____
131+ / // __ / ___/ / ___/ Version 1.2.0
132+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
133+ /___/\__,_/_/ /_/____/ Type :? for help
42134
43− *theorems> :t plusredZ_Z
44− plusredZ_Z : Z = plus Z Z
135+ Idris is free software with ABSOLUTELY NO WARRANTY.
136+ For details type :warranty.
137+ Holes: Main.plusredZ_S, Main.plusredZ_Z
45138
46− *theorems> :t plusredZ_S
47− plusredZ_S : (k : Nat) -> (k = plus k Z) -> S k = plus (S k) Z
139+This tells us that we have two holes ``Main.plusredZ_S`` and ``Main.plusredZ_Z``. We can solve
140+these separately, ``plusredZ_Z`` is the simplest so we will do that first.
48141
49−The ``:p`` command enters interactive proof mode, which can be used to
50−complete the missing definitions.
142+The ``:elab plusredZ_Z`` command enters interactive elaboration mode, which can be used to
143+complete the missing definition for ``plusredZ_Z``.
51144
52145.. code-block:: idris
53146
54− *theorems> :p plusredZ_Z
147+ *plusReducesZ> :elab plusredZ_Z
55148
56− ---------------------------------- (plusredZ_Z) --------
57− {hole0} : Z = plus Z Z
149+ ---------- Goal: ----------
150+ {hole_0} : 0 = 0
58151
59−This gives us a list of premises (above the line; there are none here)
60−and the current goal (below the line; named ``{hole0}`` here). At the
61−prompt we can enter tactics to direct the construction of the proof. In
62−this case, we can normalise the goal with the ``compute`` tactic:
152+This has been normalised to ``0 = 0`` so now we have to prove that ``0`` equals ``0``, which
153+is easy to prove by ``reflexivity`` from the ``pruviloj`` library:
63154
64155.. code-block:: idris
65156
66− -plusredZ_Z> compute
67−
68− ---------------------------------- (plusredZ_Z) --------
69− {hole0} : Z = Z
157+ -Main.plusredZ_Z> reflexivity
158+ plusredZ_Z: No more goals.
70159
71−Now we have to prove that ``Z`` equals ``Z``, which is easy to prove by
72−``Refl``. To apply a function, such as ``Refl``, we use ``refine`` which
73−introduces subgoals for each of the function’s explicit arguments
74−(``Refl`` has none):
160+This tells us that the proof is complete. We can now leave the interactive mode which
161+we entered with the ``:elab`` command. We do this with the ``:qed`` command:
75162
76163.. code-block:: idris
77164
78− -plusredZ_Z> refine Refl
79− plusredZ_Z: no more goals
165+ -Main.plusredZ_Z> :qed
166+ Proof completed!
167+ Main.plusredZ_Z = %runElab (do reflexivity)
168+ Holes: Main.plusredZ_S
80169
81−Here, we could also have used the ``trivial`` tactic, which tries to
82−refine by ``Refl``, and if that fails, tries to refine by each name in
83−the local context. When a proof is complete, we use the ``qed`` tactic
84−to add the proof to the global context, and remove the hole from the
85−unsolved holes list. This also outputs a trace of the proof:
170+This gives us a trace of the proof which is ``plusredZ_Z = %runElab (do reflexivity)``. We
171+can cut & paste this into the hole in the original file. This also tells us that we
172+have another hole ``Main.plusredZ_S`` remaining.
86173
87−.. code-block:: idris
88−
89− -plusredZ_Z> qed
90− plusredZ_Z = proof
91− compute
92− refine Refl
93−
94−.. code-block:: idris
174+This remaining proof is bit more complicated, the following diagram gives an overview:
95175
96− *theorems> :m
97− Global holes:
98− [plusredZ_S]
176+|image|
99177
100−The ``:addproof`` command, at the interactive prompt, will add the proof
101−to the source file (effectively in an appendix). Let us now prove the
102−other required lemma, ``plusredZ_S``:
178+We approach this remaining proof in the same way by using the ``:elab`` command:
103179
104180.. code-block:: idris
105181
106− *theorems> :p plusredZ_S
182+ *plusReducesZ> :elab plusredZ_S
107183
108− ---------------------------------- (plusredZ_S) --------
109− {hole0} : (k : Nat) -> (k = plus k Z) -> S k = plus (S k) Z
184+
185+ ---------- Goal: ----------
186+ {hole_0} : (k : Nat) -> (k = plus k 0) -> S k = S (plus k 0)
110187
111188In this case, the goal is a function type, using ``k`` (the argument
112189accessible by pattern matching) and ``ih`` — the local variable
113190containing the result of the recursive call. We can introduce these as
114−premisses using the ``intro`` tactic twice (or ``intros``, which
115−introduces all arguments as premisses). This gives:
191+assumptions using the ``intro`` tactic twice. The parameter is entered as
192+a constant of type ``TTName`` which is entered as a backtick with double
193+braces ```{{ih}}``. This gives:
116194
117195.. code-block:: idris
118196
119− k : Nat
120− ih : k = plus k Z
121− ---------------------------------- (plusredZ_S) --------
122− {hole2} : S k = plus (S k) Z
197+ -Main.plusredZ_S> intro `{{k}}
198+
199+ ---------- Assumptions: ----------
200+ k : Nat
201+ ---------- Goal: ----------
202+ {hole_0} : (k = plus k 0) -> S k = S (plus k 0)
203+ -Main.plusredZ_S> intro `{{ih}}
204+
205+ ---------- Assumptions: ----------
206+ k : Nat
207+ ih : k = plus k 0
208+ ---------- Goal: ----------
209+ {hole_0} : S k = S (plus k 0)
123210
124−Since plus is defined by recursion on its first argument, the term
125−``plus (S k) Z`` in the goal can be simplified, so we use ``compute``.
211+We know, from the type of ``ih``, that ``k = plus k 0``, so we would
212+like to use this knowledge to replace ``plus k 0`` in the goal with
213+``k``. We can achieve this with the ``rewriteWith`` tactic:
126214
127215.. code-block:: idris
128216
129− k : Nat
130− ih : k = plus k Z
131− ---------------------------------- (plusredZ_S) --------
132− {hole2} : S k = S (plus k Z)
217+ -Main.plusredZ_S> rewriteWith (Var `{{ih}})
133218
134−We know, from the type of ``ih``, that ``k = plus k Z``, so we would
135−like to use this knowledge to replace ``plus k Z`` in the goal with
136−``k``. We can achieve this with the ``rewrite`` tactic:
219+ ---------- Assumptions: ----------
220+ k : Nat
221+ ih : k = plus k 0
222+ ---------- Goal: ----------
223+ {hole_0} : S k = S k
224+
225+The ``rewriteWith`` tactic takes an equality proof as an argument, and tries
226+to rewrite the goal using that proof. The ``ih`` value is entered as a constant
227+of type ``TTName`` which is entered as a backtick with double braces ```{{ih}}`` but
228+``rewriteWith`` requires an expression of type ``Raw``, rather than just a name,
229+so the ``Var`` constructor is used to make a variable. Here, it results in an equality
230+which is trivially provable using ``reflexivity``:
137231
138232.. code-block:: idris
139233
140− -plusredZ_S> rewrite ih
234+ -Main.plusredZ_S> reflexivity
235+ plusredZ_S: No more goals.
236+ -Main.plusredZ_S> :qed
237+ Proof completed!
238+ Main.plusredZ_S = %runElab (do intro `{{k}}
239+ intro `{{ih}}
240+ rewriteWith (Var `{{ih}})
241+ reflexivity)
242+
243+We can't just cut & paste this into the hole in the original file like this:
244+
245+.. code-block:: idris
246+
247+ import Pruviloj
248+ import Pruviloj.Induction
249+
250+ %language ElabReflection
251+
252+ plusReducesZ' : (n:Nat) -> n = plus n Z
253+ plusReducesZ' Z = %runElab (do reflexivity)
254+ plusReducesZ' (S k) = let ih = plusReducesZ' k in
255+ (%runElab (do intro `{{k}}
256+ intro `{{ih}}
257+ rewriteWith (Var `{{ih}})
258+ reflexivity)
259+ )
141260
142− k : Nat
143− ih : k = plus k Z
144− ---------------------------------- (plusredZ_S) --------
145− {hole3} : S k = S k
261+because this gives the following error:
146262
147− -plusredZ_S>
263+.. code-block:: idris
264+
265+ Idris> :load elabInteractiveEx2.idr
266+ elabInteractiveEx2.idr:10:32:
267+ |
268+ 10 | intro `{{ih}}
269+ | ^
270+ unexpected "in"
271+ expecting dependent type signature
148272
149−The ``rewrite`` tactic takes an equality proof as an argument, and tries
150−to rewrite the goal using that proof. Here, it results in an equality
151−which is trivially provable:
273+However if we put the proof into a separate function like this:
152274
153275.. code-block:: idris
154276
155− -plusredZ_S> trivial
156− plusredZ_S: no more goals
157− -plusredZ_S> qed
158− plusredZ_S = proof {
159− intros;
160− rewrite ih;
161− trivial;
162− }
277+ import Pruviloj
278+ import Pruviloj.Induction
279+
280+ %language ElabReflection
281+
282+ plusredZ_S : (k : Nat) -> (ih:(k = plus k Z)) -> (S k = S (plus k Z))
283+ plusredZ_S = %runElab (do intro `{{k}}
284+ intro `{{ih}}
285+ rewriteWith (Var `{{ih}})
286+ reflexivity)
287+
288+ plusReducesZ' : (n:Nat) -> n = plus n Z
289+ plusReducesZ' Z = %runElab (do reflexivity)
290+ plusReducesZ' (S k) = let ih = plusReducesZ' k in plusredZ_S k ih
291+
292+This then loads [#f1]_ .
293+
294+.. [#f1] https://github.com/idris-lang/Idris-dev/issues/4556
163295
164−Again, we can add this proof to the end of our source file using the
165−``:addproof`` command at the interactive prompt.
296+.. |image| image:: ../image/plusReducesProof.png
docs/proofs/interactiveOld.rstnew file+169
@@ -0,0 +1,169 @@
1+**************************************************************
2+DEPRECATED: Interactive Theorem Proving Using Old Tactics Code
3+**************************************************************
4+
5+.. warning::
6+ The interactive theorem-proving interface documented here has been
7+ deprecated in favor of :ref:`elaborator-reflection`.
8+
9+Idris also supports interactive theorem proving via tactics. This
10+is generally not recommended to be used directly, but rather used as a
11+mechanism for building proof automation which is beyond the scope of this
12+tutorial. In this section, we briefly discus tactics.
13+
14+One way to write proofs interactively is to write the general *structure* of
15+the proof, and use the interactive mode to complete the details.
16+Consider the following definition, proved in :ref:`sect-theorems`:
17+
18+.. code-block:: idris
19+
20+ plusReduces : (n:Nat) -> plus Z n = n
21+
22+We’ll be constructing the proof by *induction*, so we write the cases for ``Z``
23+and ``S``, with a recursive call in the ``S`` case giving the inductive
24+hypothesis, and insert *holes* for the rest of the definition:
25+
26+.. code-block:: idris
27+
28+ plusReducesZ' : (n:Nat) -> n = plus n Z
29+ plusReducesZ' Z = ?plusredZ_Z
30+ plusReducesZ' (S k) = let ih = plusReducesZ' k in
31+ ?plusredZ_S
32+
33+On running , two global names are created, ``plusredZ_Z`` and
34+``plusredZ_S``, with no definition. We can use the ``:m`` command at the
35+prompt to find out which holes are still to be solved (or, more
36+precisely, which functions exist but have no definitions), then the
37+``:t`` command to see their types:
38+
39+.. code-block:: idris
40+
41+ *theorems> :m
42+ Global holes:
43+ [plusredZ_S,plusredZ_Z]
44+
45+.. code-block:: idris
46+
47+ *theorems> :t plusredZ_Z
48+ plusredZ_Z : Z = plus Z Z
49+
50+ *theorems> :t plusredZ_S
51+ plusredZ_S : (k : Nat) -> (k = plus k Z) -> S k = plus (S k) Z
52+
53+The ``:p`` command enters interactive proof mode, which can be used to
54+complete the missing definitions.
55+
56+.. code-block:: idris
57+
58+ *theorems> :p plusredZ_Z
59+
60+ ---------------------------------- (plusredZ_Z) --------
61+ {hole0} : Z = plus Z Z
62+
63+This gives us a list of premises (above the line; there are none here)
64+and the current goal (below the line; named ``{hole0}`` here). At the
65+prompt we can enter tactics to direct the construction of the proof. In
66+this case, we can normalise the goal with the ``compute`` tactic:
67+
68+.. code-block:: idris
69+
70+ -plusredZ_Z> compute
71+
72+ ---------------------------------- (plusredZ_Z) --------
73+ {hole0} : Z = Z
74+
75+Now we have to prove that ``Z`` equals ``Z``, which is easy to prove by
76+``Refl``. To apply a function, such as ``Refl``, we use ``refine`` which
77+introduces subgoals for each of the function’s explicit arguments
78+(``Refl`` has none):
79+
80+.. code-block:: idris
81+
82+ -plusredZ_Z> refine Refl
83+ plusredZ_Z: no more goals
84+
85+Here, we could also have used the ``trivial`` tactic, which tries to
86+refine by ``Refl``, and if that fails, tries to refine by each name in
87+the local context. When a proof is complete, we use the ``qed`` tactic
88+to add the proof to the global context, and remove the hole from the
89+unsolved holes list. This also outputs a trace of the proof:
90+
91+.. code-block:: idris
92+
93+ -plusredZ_Z> qed
94+ plusredZ_Z = proof
95+ compute
96+ refine Refl
97+
98+.. code-block:: idris
99+
100+ *theorems> :m
101+ Global holes:
102+ [plusredZ_S]
103+
104+The ``:addproof`` command, at the interactive prompt, will add the proof
105+to the source file (effectively in an appendix). Let us now prove the
106+other required lemma, ``plusredZ_S``:
107+
108+.. code-block:: idris
109+
110+ *theorems> :p plusredZ_S
111+
112+ ---------------------------------- (plusredZ_S) --------
113+ {hole0} : (k : Nat) -> (k = plus k Z) -> S k = plus (S k) Z
114+
115+In this case, the goal is a function type, using ``k`` (the argument
116+accessible by pattern matching) and ``ih`` — the local variable
117+containing the result of the recursive call. We can introduce these as
118+premises using the ``intro`` tactic twice (or ``intros``, which
119+introduces all arguments as premises). This gives:
120+
121+.. code-block:: idris
122+
123+ k : Nat
124+ ih : k = plus k Z
125+ ---------------------------------- (plusredZ_S) --------
126+ {hole2} : S k = plus (S k) Z
127+
128+Since plus is defined by recursion on its first argument, the term
129+``plus (S k) Z`` in the goal can be simplified, so we use ``compute``.
130+
131+.. code-block:: idris
132+
133+ k : Nat
134+ ih : k = plus k Z
135+ ---------------------------------- (plusredZ_S) --------
136+ {hole2} : S k = S (plus k Z)
137+
138+We know, from the type of ``ih``, that ``k = plus k Z``, so we would
139+like to use this knowledge to replace ``plus k Z`` in the goal with
140+``k``. We can achieve this with the ``rewrite`` tactic:
141+
142+.. code-block:: idris
143+
144+ -plusredZ_S> rewrite ih
145+
146+ k : Nat
147+ ih : k = plus k Z
148+ ---------------------------------- (plusredZ_S) --------
149+ {hole3} : S k = S k
150+
151+ -plusredZ_S>
152+
153+The ``rewrite`` tactic takes an equality proof as an argument, and tries
154+to rewrite the goal using that proof. Here, it results in an equality
155+which is trivially provable:
156+
157+.. code-block:: idris
158+
159+ -plusredZ_S> trivial
160+ plusredZ_S: no more goals
161+ -plusredZ_S> qed
162+ plusredZ_S = proof {
163+ intros;
164+ rewrite ih;
165+ trivial;
166+ }
167+
168+Again, we can add this proof to the end of our source file using the
169+``:addproof`` command at the interactive prompt.
docs/proofs/patterns.rst+3−3
@@ -120,7 +120,7 @@ First, create a template definition with ``\d``:
120120 plus_commutes_Z = ?plus_commutes_Z_rhs
121121
122122Since we are going to write this by induction on ``m``, which is
123−implciit, we will need to bring ``m`` into scope manually:
123+implicit, we will need to bring ``m`` into scope manually:
124124
125125.. code-block:: idris
126126
@@ -181,8 +181,8 @@ For ``plus_commutes_Z_rhs_2``, we now see:
181181 --------------------------------------
182182 plus_commutes_Z_rhs_2 : S k = S (plus k 0)
183183
184−Again, the ``fromInteger 0`` is merely due to ``Nat`` being an instance
185−of the ``Num`` typeclass. So we know that ``k = plus k 0``, but how do
184+Again, the ``fromInteger 0`` is merely due to ``Nat`` having an implementation
185+of the ``Num`` interface. So we know that ``k = plus k 0``, but how do
186186we use this to update the goal to ``S k = S k``?
187187
188188To achieve this, Idris provides a ``replace`` function as part of the
docs/proofs/pluscomm.rst+3−3
@@ -53,7 +53,7 @@ as follows:
5353.. code-block:: idris
5454
5555 data (=) : a -> b -> Type where
56− Refl : x = x
56+ Refl : x = x
5757
5858Note that this must be built-in, rather than defined in the library,
5959because ``=`` is a reserved operator — you cannot define this directly
@@ -177,12 +177,12 @@ given above as Idris type declarations:
177177
178178Both of these properties (and many others) are proved for natural number
179179addition in the Idris standard library, using ``(+)`` from the ``Num``
180−type class rather than using ``plus`` directly. They have the names
180+interface rather than using ``plus`` directly. They have the names
181181``plusCommutative`` and ``plusAssociative`` respectively.
182182
183183In the remainder of this tutorial, we will explore several different
184184ways of proving ``plus_commutes`` (or, to put it another way, writing
185−the function.) We will also discuss how to use such equality proofs, and
185+the function). We will also discuss how to use such equality proofs, and
186186see where the need for them arises in practice.
187187
188188.. [1]
docs/proofs/propositional.rstnew file+133
@@ -0,0 +1,133 @@
1+******************************
2+Proving Propositional Equality
3+******************************
4+
5+This page attempts to explain some of the techniques used in Idris to prove propositional equalities.
6+
7+We have seen that definitional equalities can be proved using ``Refl`` since they always normalise to unique values that can be compared directly.
8+
9+However with propositional equalities we are using symbolic variables they do not always normalise.
10+
11+So to take the previous example:
12+
13+.. code-block:: idris
14+
15+ plusReducesR : (n:Nat) -> plus n Z = n
16+
17+In this case ``plus n Z`` does not normalise to ``n``. Even though both sides are equal we cannot pattern match ``Refl``.
18+
19+If the pattern match cannot match for all ``n`` then the way around this is to separately match all possible values of ``n``. In the case of natural numbers we do this by induction.
20+
21+So here:
22+
23+.. code-block:: idris
24+
25+ plusReducesR : n = plus n 0
26+ plusReducesR {n = Z} = Refl
27+ plusReducesR {n = (S k)} = let rec = plus_commutes_Z {n=k} in
28+ rewrite rec in Refl
29+
30+we don't call ``Refl`` to match on ``n = plus n 0`` forall ``n`` we call it for every number separately. So, in the second line, the pattern matcher knows to substitute ``Z`` for ``n`` in the type being matched. This uses ``rewrite`` which is explained below.
31+
32+Replace
33+=======
34+
35+This implements the *indiscernability of identicals* principle, if two terms are equal then they have the same properties. In other words, if ``x=y``, then we can substitute ``y`` for ``x`` in any expression. In our proofs we can express this as:
36+
37+.. code-block:: idris
38+
39+ if x=y
40+ then P x = P y
41+
42+where ``P`` is a pure function representing the property. In the examples below ``P`` is an expression in some variable with a type like this: ``P: n -> Type``.
43+
44+So if ``n`` is a natural number variable then ``P`` could be something like ``2*n + 3``.
45+
46+To use this in our proofs there is the following function in the prelude:
47+
48+.. code-block:: idris
49+
50+ ||| Perform substitution in a term according to some equality.
51+ replace : {a:_} -> {x:_} -> {y:_} -> {P : a -> Type} -> x = y -> P x -> P y
52+ replace Refl prf = prf
53+
54+Removing the implicits, if we supply an equality ``x=y`` and a proof of a property of ``x`` (i.e. ``P x``) then we get a proof of a property of ``y`` (i.e. ``P y``)
55+
56+.. code-block:: idris
57+
58+ > :t replace
59+ replace : (x = y) -> P x -> P y
60+
61+So, in the following example, if we supply ``p1 x`` which is a proof that ``x=2`` and the equality ``x=y`` then we get a proof that ``y=2``.
62+
63+.. code-block:: idris
64+
65+ p1: Nat -> Type
66+ p1 n = (n=2)
67+
68+ testReplace: (x=y) -> (p1 x) -> (p1 y)
69+ testReplace a b = replace a b
70+
71+Rewrite
72+=======
73+
74+Similar to ``replace`` above but Idris provides a nicer syntax which makes ``rewrite`` easier to use in examples like ``plusReducesR`` above.
75+
76+.. code-block:: idris
77+
78+ rewrite__impl : (P : a -> Type) -> x = y -> P y -> P x
79+ rewrite__impl p Refl prf = prf
80+
81+The difference from ``replace`` above is nicer syntax and the property ``p1`` is explicitly supplied and it goes in the opposite direction (input and output reversed).
82+
83+Example: again we supply ``p1`` which is a proof that ``x=2`` and the equality ``x=y`` then we get a proof that ``y=2``.
84+
85+.. code-block:: idris
86+
87+ p1: Nat -> Type
88+ p1 x = (x=2)
89+
90+ testRewrite2: (x=y) -> (p1 y) -> (p1 x)
91+ testRewrite2 a b = rewrite a in b
92+
93+We can think of rewrite doing this:
94+
95+ * start with a equation ``x=y`` and a property ``P: x -> Type``;
96+ * search ``y`` in ``P``;
97+ * replace all occurrences of ``y`` with ``x`` in ``P``.
98+
99+That is, we are doing a substitution.
100+
101+Symmetry and Transitivity
102+=========================
103+
104+In addition to *reflexivity* equality also obeys *symmetry* and *transitivity* and these are also included in the prelude:
105+
106+.. code-block:: idris
107+
108+ ||| Symmetry of propositional equality
109+ sym : {left:a} -> {right:b} -> left = right -> right = left
110+ sym Refl = Refl
111+
112+ ||| Transitivity of propositional equality
113+ trans : {a:x} -> {b:y} -> {c:z} -> a = b -> b = c -> a = c
114+ trans Refl Refl = Refl
115+
116+Heterogeneous Equality
117+======================
118+
119+Also included in the prelude:
120+
121+.. code-block:: idris
122+
123+ ||| Explicit heterogeneous ("John Major") equality. Use this when Idris
124+ ||| incorrectly chooses homogeneous equality for `(=)`.
125+ ||| @ a the type of the left side
126+ ||| @ b the type of the right side
127+ ||| @ x the left side
128+ ||| @ y the right side
129+ (~=~) : (x : a) -> (y : b) -> Type
130+ (~=~) x y = (x = y)
131+
132+
133+
docs/reference/codegen.rstnew file+147
@@ -0,0 +1,147 @@
1+.. _code-generation-targets:
2+
3+************************
4+Code Generation Targets
5+************************
6+
7+``Idris`` has been designed such that the compiler can generate code for
8+different backends upon request. By default ``Idris`` generates a ``C``
9+backend when generating an executable. Included within the standard Idris installation are backends for Javascript and Node.js.
10+
11+However, there are third-party code generators out there. Below we
12+describe some of these backends and how you can use them when
13+compiling your ``Idris`` code. If you want to write your own codegen for your language there is a `stub project on GitHub <https://github.com/idris-lang/idris-emptycg>`__ that can help point you in the right direction.
14+
15+Official Backends
16+==================
17+
18+C Language
19+----------
20+
21+The default target of Idris is C. In order to view the generated C code, compile via:
22+
23+::
24+
25+ $ idris hello.idr -S -o hello.c
26+
27+
28+Javascript
29+----------
30+
31+To generate code that is tailored for running in the browser
32+issue the following command:
33+
34+::
35+
36+ $ idris --codegen javascript hello.idr -o hello.js
37+
38+
39+Idris can produce big chunks of JavaScript code (hello world weighs in at about
40+60 lines). However, the generated code can be minified using the
41+`closure-compiler <https://developers.google.com/closure/compiler/>`__ from
42+Google.
43+
44+::
45+
46+ java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js
47+
48+
49+Node.js
50+-------
51+
52+Generating code for NodeJS is slightly different. Idris outputs a
53+JavaScript file that can be directly executed via node.
54+
55+::
56+
57+ $ idris --codegen node hello.idr -o hello
58+ $ ./hello
59+ Hello world
60+
61+
62+
63+Third Party
64+============
65+
66+.. note::
67+
68+ These are third-party code generations and may have bit-rotted or
69+ do not work with current versions of Idris. Please speak to the
70+ project's maintainors if there are any problems.
71+
72+
73+CIL (.NET, Mono, Unity)
74+-----------------------
75+
76+::
77+
78+ idris --codegen cil Main.idr -o HelloWorld.exe \
79+ && mono HelloWorld.exe
80+
81+The resulting assemblies can also be used with .NET or Unity.
82+
83+Requires `idris-cil <https://github.com/bamboo/idris-cil>`__.
84+
85+Erlang
86+------
87+
88+`Available online <https://github.com/lenary/idris-erlang>`__
89+
90+Java
91+----
92+
93+`Available online <https://github.com/idris-hackers/idris-java>`__
94+
95+
96+::
97+
98+ idris hello.idr --codegen java -o hello.jar
99+
100+
101+Note: The resulting .jar is automatically prefixed by a header including
102+an .sh script to allow executing it directly.
103+
104+JVM
105+---
106+
107+`Available online <https://github.com/mmhelloworld/idris-jvm>`__
108+
109+LLVM
110+-----
111+
112+`Available online <https://github.com/idris-hackers/idris-llvm>`__
113+
114+Malfunction
115+------------
116+
117+`Available online <https://github.com/stedolan/idris-malfunction>`__
118+
119+Ocaml
120+-----
121+
122+`Available online <https://github.com/ziman/idris-ocaml>`__
123+
124+PHP
125+---
126+
127+`Available online <https://github.com/edwinb/idris-php>`__
128+
129+Python
130+------
131+
132+`Available online <https://github.com/ziman/idris-py>`__
133+
134+Ruby
135+----
136+
137+`Available online <https://github.com/mrb/idris-ruby>`__
138+
139+WS
140+---
141+
142+`Available online <https://github.com/edwinb/WS-idr>`__
143+
144+WebAssembly
145+-----------
146+
147+`Available online <https://github.com/SPY/idris-codegen-wasm>`__
docs/reference/compilation.rst+81−11
@@ -1,9 +1,8 @@
1−***********************
2−Compilation and Logging
3−***********************
1+************************************
2+Compilation, Logging, and Reporting
3+************************************
44
5−
6−This section provides highlights of the Idris compilation process, and
5+This section provides information about the Idris compilation process, and
76provides details over how you can follow the process through logging.
87
98Compilation Process
@@ -42,16 +41,51 @@ With Idris you can ask it to terminate the compilation process after type checki
4241
4342Use of this option will still result in the generation of the Idris binary ``.ibc`` files, and is suitable if you do not wish to generate code from one of the supported backends.
4443
45−Logging Output
46−==============
44+Reporting Compilation Process
45+=============================
46+
47+During compilation the reporting of Idris' progress can be controlled
48+by setting a verbosity level.
49+
50++ ``-V``, or alternatively ``--verbose`` and ``--V0``, will report which file Idris is currently type checking.
51++ ``--V1`` will additionally report: Parsing, IBC Generation, and Code
52+ Generation.
53++ ``--V2`` will additionally report: Totality Checking, Universe
54+ Checking, and the individual steps prior to code generation.
55+
56+
57+By default Idris' progress reporting is set to quiet: ``-q``, or ``--quiet``.
58+
59+Logging Internal Operation
60+===========================
4761
48−Logging of the Idris output can be used to diagnose problems with the compilation of your program.
49−Idris supports the logging at various different levels of verbosity: 1 to 10.
62+For those that develop on the Idris compiler, the internal operation
63+of Idris is captured using a category based logger. Currently, the
64+logging infrastructure has support for the following categories:
65+
66++ Parser (``parser``)
67++ Elaborator (``elab``)
68++ Code generation (``codegen``)
69++ Erasure (``erasure``)
70++ Coverage Checking (``coverage``)
71++ IBC generation (``ibc``)
72+
73+
74+These categories are specified using the command-line option:
75+``--logging-categories CATS``, where ``CATS`` is a quoted colon
76+separated string of the categories you want to see. By default if this
77+option is not specified all categories are allowed. Sub-categories
78+have yet to be defined but will be in the future, especially for the
79+elaborator.
80+
81+Further, the verbosity of logging can be controlled by specifying a
82+logging level between: 1 to 10 using the command-line option: ``--log
83+<level>``.
5084
5185+ Level 0: Show no logging output. Default level
5286+ Level 1: High level details of the compilation process.
53−+ Level 2: Provides details of the coverage checking, and further details the elaboration process specifically: Class, Clauses, Data, Term, and Types,
54−+ Level 3: Provides details of compilation of the IRTS, erasue, parsing, case splitting, and further details elaboration of: Instances, Providers, and Values.
87++ Level 2: Provides details of the coverage checking, and further details the elaboration process specifically: Interface, Clauses, Data, Term, and Types,
88++ Level 3: Provides details of compilation of the IRTS, erasure, parsing, case splitting, and further details elaboration of: Implementations, Providers, and Values.
5589+ Level 4: Provides further details on: Erasure, Coverage Checking, Case splitting, and elaboration of clauses.
5690+ Level 5: Provides details on the prover, and further details elaboration (adding declarations) and compilation of the IRTS.
5791+ Level 6: Further details elaboration and coverage checking.
@@ -59,3 +93,39 @@ Idris supports the logging at various different levels of verbosity: 1 to 10.
5993+ Level 8:
6094+ Level 9:
6195+ Level 10: Further details elaboration.
96+
97+Environment Variables
98+=====================
99+
100+Several paths set by default within the Idris compiler can be
101+overridden through environment variables. The provided variables are:
102+
103+* ``IDRIS_CC`` Change the *C compiler* used by the *C backend*.
104+* ``IDRIS_CFLAGS`` Change the *C flags* passed to the *C compiler*.
105+* ``TARGET`` Change the target directory i.e. *data dir* where Idris installs files when installing using Cabal/Stack.
106+* ``IDRIS_LIBRARY_PATH`` Change the location of where installed packages are found/installed.
107+* ``IDRIS_DOC_PATH`` Change the location of where generated idrisdoc for packages are installed.
108+
109+.. note::
110+
111+ In versions of Idris prior to 0.12.3 the environment variables
112+ ``IDRIS_LIBRARY_PATH`` and ``TARGET`` were both used to affect the
113+ installation of single packages and direct where Idris installed
114+ its data. The meaning of these variables has changed, and command
115+ line options are preferred when changing where individual packages
116+ are installed.
117+
118+The CLI option ``--ibcsubdir`` can be used to direct where generated IBC
119+files are placed. However, this means Idris will install files in a
120+non-standard location separate from the rest of the installed
121+packages. The CLI option ``--idrispath <dir>`` allows you to add a
122+directory to the library search path; this option can be used multiple
123+times and can be shortened to ``-i <dir>``. Similary, the ``--sourcepath
124+<dir>`` option can be used to add directories to the source search
125+path. There is no shortened version for this option as ``-s`` is a
126+reserved flag.
127+
128+Further, Idris also supports options to augment the paths used, and
129+pass options to the code generator backend. The option ``--cg-opt
130+<ARG>`` can be used to pass options to the code generator. The format
131+of ``<ARG>`` is dependent on the selected backend.
docs/reference/documenting.rst+12−5
@@ -9,7 +9,7 @@ for a reader’s edification and are ignored by the compiler, and inline
99API documentation, which the compiler parses and stores for future
1010reference. To consult the documentation for a declaration ``f``, write
1111``:doc f`` at the REPL or use the appropriate command in your editor
12−(``C-c C-d`` in Emacs, in Vim).
12+(``C-c C-d`` in Emacs, ``<LocalLeader>h`` in Vim).
1313
1414Comments
1515========
@@ -40,7 +40,7 @@ lines, each of which begins with ``|||`` (three pipe symbols). The
4040first paragraph of the documentation is taken to be an overview, and
4141in some contexts, only this overview will be shown. After the
4242documentation for the declaration as a whole, it is possible to
43−associate documetation with specific named parameters, which can
43+associate documentation with specific named parameters, which can
4444either be explicitly name or the results of converting free variables
4545to implicit parameters. Annotations are the same as with Javadoc
4646annotations, that is for the named parameter ``(n : T)``, the
@@ -61,7 +61,14 @@ italics correctly). A comprehensive set of examples is given below.
6161 ||| Add some numbers.
6262 |||
6363 ||| Addition is really great. This paragraph is not part of the overview.
64− ||| Still the same paragraph. Lists are also nifty:
64+ ||| Still the same paragraph.
65+ |||
66+ ||| You can even provide examples which are inlined in the documentation:
67+ ||| ```idris example
68+ ||| add 4 5
69+ ||| ```
70+ |||
71+ ||| Lists are also nifty:
6572 ||| * Really nifty!
6673 ||| * Yep!
6774 ||| * The name `add` is a **bold** choice
@@ -75,7 +82,7 @@ italics correctly). A comprehensive set of examples is given below.
7582 ||| Append some vectors
7683 ||| @ a the contents of the vectors
7784 ||| @ xs the first vector (recursive param)
78− ||| @ ys the second vector (not analyzed)
85+ ||| @ ys the second vector (not analysed)
7986 appendV : (xs : Vect n a) -> (ys : Vect m a) -> Vect (add n m) a
8087 appendV [] ys = ys
8188 appendV (x::xs) ys = x :: appendV xs ys
@@ -98,7 +105,7 @@ italics correctly). A comprehensive set of examples is given below.
98105 ||| @ ty the type of the term
99106 data Term : (ctxt : Vect n Ty) -> (ty : Ty) -> Type where
100107
101− ||| The consructor of the unit type
108+ ||| The constructor of the unit type
102109 ||| More comment
103110 ||| @ ctxt the typing context
104111 UnitCon : {ctxt : Vect n Ty} -> Term ctxt UNIT
docs/reference/erasure.rst+10−10
@@ -29,7 +29,7 @@ and we can use irrelevance-related methods to achieve erasure.
2929However, sometimes we want to erase *indices* and this is where the
3030traditional approaches stop being useful, mainly for reasons described
3131in the `original proposal
32−<https://github.com/idris-lang/Idris-dev/wiki/Egg-%232%3A-Erasure-annotations#prop-is-cumbersome-coq>`__.
32+<https://github.com/idris-lang/Idris-dev/wiki/Egg-%232%3A-Erasure-annotations>`__.
3333
3434.. code-block:: idris
3535
@@ -95,7 +95,7 @@ cannot get below O(n) with time complexities.
9595One could argue that Idris in fact compiles ``Nat`` via GMP but
9696that's a moot point for two reasons:
9797
98−+ First, whenever we try to index our datastructures with anything
98++ First, whenever we try to index our data structures with anything
9999 else than ``Nat``, the compiler is not going to come to the rescue.
100100
101101+ Second, even with ``Nat``, the GMP integers are *still* there and
@@ -103,7 +103,7 @@ that's a moot point for two reasons:
103103
104104This ought not to be the case since the ``Nat`` are never used at
105105runtime and they are only there for typechecking purposes. Hence we
106−should get rid of them and get runtime code similar to what a idris
106+should get rid of them and get runtime code similar to what an Idris
107107programmer would write.
108108
109109U-views of lists
@@ -127,7 +127,7 @@ For better intuition, the shape of the U-view of
127127
128128 x0 y0 (two)
129129 x1 y1 (two)
130− x2 y1 (two)
130+ x2 y2 (two)
131131 z (one)
132132
133133When recursing over this structure, the values of ``xs`` range over
@@ -163,7 +163,7 @@ analysis algorithm.)
163163* function arguments
164164
165165* data constructor fields (including record fields and dictionary
166− fields of class instances)
166+ fields of interface implementations)
167167
168168For example, ``Either`` often compiles to the same runtime
169169representation as ``Bool``. Constructor field removal sometimes
@@ -254,7 +254,7 @@ Benchmarks
254254==========
255255
256256- source: https://github.com/ziman/idris-benchmarks
257−- results: http://ziman.functor.sk/erasure-bm/
257+- results: https://ziman.functor.sk/erasure-bm/
258258
259259It can be clearly seen that asymptotics are improved by erasure.
260260
@@ -269,7 +269,7 @@ Usage warnings are quite bad and unhelpful at the moment. We should
269269include more information and at least translate argument numbers to
270270their names.
271271
272−There is no decent documentation yet. This wiki page is the first one.
272+There is no decent documentation yet. This page is the first one.
273273
274274There is no generally accepted terminology. We switch between
275275"dotted", "unused", "erased", "irrelevant", "inaccessible", while each
@@ -277,7 +277,7 @@ has a slightly different meaning. We need more consistent and
277277understandable naming.
278278
279279If the same type is used in both erased and non-erased context, it
280−will retain its fields to accomodate the least common denominator --
280+will retain its fields to accommodate the least common denominator --
281281the non-erased context. This is particularly troublesome in the case
282282of the type of (dependent) pairs, where it actually means that no
283283erasure would be performed. We should probably locate disjoint uses of
@@ -295,7 +295,7 @@ considered to be using all their arguments. To work around this, you
295295can force erasure via the type system, using the ``Erased`` wrapper:
296296https://github.com/idris-lang/Idris-dev/blob/master/libs/base/Data/Erased.idr
297297
298−Typeclass methods are considered to be using the union of all their
298+Interface methods are considered to be using the union of all their
299299implementations. In other words, an argument of a method is unused
300300only if it is unused in every implementation of the method that occurs
301301in the program.
@@ -499,4 +499,4 @@ References
499499
500500.. [BMM04] Edwin Brady, Conor McBride, James McKinna: `Inductive
501501 families need not store their indices
502− <http://citeseerx.ist.psu.edu/viewdoc/summary;jsessionid=1F796FCF0F2C4C535FC70F62BE2FB821?doi=10.1.1.62.3849>`__
502+ <https://citeseerx.ist.psu.edu/viewdoc/summary;jsessionid=1F796FCF0F2C4C535FC70F62BE2FB821?doi=10.1.1.62.3849>`__
docs/reference/ffi.rst+272−17
@@ -47,7 +47,7 @@ the C FFI and ``JS_IO`` to use the JavaScript FFI:
4747 JS_IO a = IO' FFI_JS a
4848
4949As before, the entry point to an Idris program is ``main``, but the
50−type of ``main`` can now be any instance of ``IO'``, e.g. the
50+type of ``main`` can now be any implementation of ``IO'``, e.g. the
5151following are both valid:
5252
5353.. code-block:: idris
@@ -80,24 +80,60 @@ For C, this is:
8080.. code-block:: idris
8181
8282 ||| Supported C integer types
83+ public export
8384 data C_IntTypes : Type -> Type where
84− C_IntChar : C_IntTypes Char
85− C_IntNative : C_IntTypes Int
86− ... -- more integer types
85+ C_IntChar : C_IntTypes Char
86+ C_IntNative : C_IntTypes Int
87+ C_IntBits8 : C_IntTypes Bits8
88+ C_IntBits16 : C_IntTypes Bits16
89+ C_IntBits32 : C_IntTypes Bits32
90+ C_IntBits64 : C_IntTypes Bits64
91+
92+ ||| Supported C function types
93+ public export
94+ data C_FnTypes : Type -> Type where
95+ C_Fn : C_Types s -> C_FnTypes t -> C_FnTypes (s -> t)
96+ C_FnIO : C_Types t -> C_FnTypes (IO' FFI_C t)
97+ C_FnBase : C_Types t -> C_FnTypes t
8798
8899 ||| Supported C foreign types
100+ public export
89101 data C_Types : Type -> Type where
90− C_Str : C_Types String
91− C_Float : C_Types Float
92− C_Ptr : C_Types Ptr
93− C_MPtr : C_Types ManagedPtr
94− C_Unit : C_Types ()
95− C_Any : C_Types (Raw a)
96− C_IntT : C_IntTypes i -> C_Types i
97−
102+ C_Str : C_Types String
103+ C_Float : C_Types Double
104+ C_Ptr : C_Types Ptr
105+ C_MPtr : C_Types ManagedPtr
106+ C_Unit : C_Types ()
107+ C_Any : C_Types (Raw a)
108+ C_FnT : C_FnTypes t -> C_Types (CFnPtr t)
109+ C_IntT : C_IntTypes i -> C_Types i
110+
111+ ||| A descriptor for the C FFI. See the constructors of `C_Types`
112+ ||| and `C_IntTypes` for the concrete types that are available.
113+ %error_reverse
114+ public export
98115 FFI_C : FFI
99− FFI_C = MkFFI C_Types
100− String -- the name of the C function
116+ FFI_C = MkFFI C_Types String String
117+
118+Linking foreign code
119+====================
120+
121+This is the example of linking C code.
122+
123+.. code-block:: idris
124+
125+ %include C "mylib.h"
126+ %link C "mylib.o"
127+
128+Example Makefile
129+
130+.. code-block:: shell
131+
132+ DEFAULT: mylib.o main.idr
133+ idris main.idr -o executableFile
134+
135+ clean:
136+ rm -f executableFile mylib.o main.ibc
101137
102138Foreign calls
103139=============
@@ -135,11 +171,230 @@ example a shorthand for calling external JavaScript functions:
135171 {auto fty : FTy FFI_JS [] ty} -> ty
136172 jscall fname ty = foreign FFI_JS fname ty
137173
174+C callbacks
175+-----------
176+It is possible to pass an Idris function to a C function taking a function
177+pointer by using ``CFnPtr`` in the function type. The Idris function is passed
178+to ``MkCFnPtr`` in the arguments. The example below shows declaring the C standard
179+library function ``qsort`` which takes a pointer to a comparison function.
180+
181+.. code-block:: idris
182+
183+ myComparer : Ptr -> Ptr -> Int
184+ myComparer = ...
185+
186+ qsort : Ptr -> Int -> Int -> IO ()
187+ qsort data elems elsize = foreign FFI_C "qsort"
188+ (Ptr -> Int -> Int -> CFnPtr (Ptr -> Ptr -> Int) -> IO ())
189+ data elems elsize (MkCFnPtr myComparer)
190+
191+There are a few limitations to callbacks in the C FFI. The foreign function can't
192+take the function to make a callback of as an argument. This will give a
193+compilation error:
194+
195+.. code-block:: idris
196+
197+ -- This does not work
198+ example : (Int -> ()) -> IO ()
199+ example f = foreign FFI_C "callbacker" (CFnPtr (Int -> ()) -> IO ()) f
200+
201+Note that the function that is used as a callback can't be a closure, that is
202+it can't be a partially applied function. This is because the mechanism used is
203+unable to pass the closed-over values through C. If we want to pass Idris values
204+to the callback we have to pass them through C explicitly. Non-primitive Idris
205+values can be passed to C via the ``Raw`` type.
206+
207+The other big limitation is that it doesn't support ``IO`` functions. Use
208+``unsafePerformIO`` to wrap them (i.e. to make an ``IO`` function usable as a
209+callback, change the return type from ``IO r`` to ``r``, and change the ``= do``
210+to ``= unsafePerformIO $ do``).
211+
212+There are two special function names:
213+``%wrapper`` returns the function pointer that wraps an Idris function. This
214+is useful if the function pointer isn't taken by a C function directly but
215+should be inserted into a data structure. A foreign declaration using
216+``%wrapper`` must return ``IO Ptr``.
217+
218+.. code-block:: idris
219+
220+ -- this returns the C function pointer to a qsort comparer
221+ example_wrapper : IO Ptr
222+ example_wrapper = foreign FFI_C "%wrapper" (CFnPtr (Ptr -> Ptr -> Int) -> IO Ptr)
223+ (MkCFnPtr myComparer)
224+
225+``%dynamic`` calls a C function pointer with some arguments. This is useful if
226+a C function returns or data structure contains a C function pointer, for example
227+structs of function pointers are common in object-oriented C such as in COM or the
228+Linux kernel. The function type contains an extra ``Ptr`` at the start for the
229+function pointer. ``%dynamic`` can be seen as a pseudo-function that calls the
230+function in the first argument, passing the remaining arguments to it.
231+
232+.. code-block:: idris
233+
234+ -- we have a pointer to a function with the signature int f(int), call it
235+ example_dynamic : Ptr -> Int -> IO Int
236+ example_dynamic fn x = foreign FFI_C "%dynamic" (Ptr -> Int -> IO Int) fn x
237+
238+If the foreign name is prefixed by a ``&``, it is treated as a pointer to the
239+global variable with the following name. The type must be just ``IO Ptr``.
240+
241+.. code-block:: idris
242+
243+ -- access the global variable errno
244+ errno : IO Ptr
245+ errno = foreign FFI_C "&errno" (IO Ptr)
246+
247+If the foreign name is prefixed by a ``#``, the name is pasted in literally. This is
248+useful to access constants that are preprocessor definitions (like ``INT_MAX``).
249+
250+.. code-block:: idris
251+
252+ %include C "limits.h"
253+
254+ -- access the preprocessor definition INT_MAX
255+ intMax : IO Int
256+ intMax = foreign FFI_C "#INT_MAX" (IO Int)
257+
258+ main : IO ()
259+ main = print !intMax
260+
261+For more complicated interactions with C (such as reading and setting fields
262+of a C ``struct``), there is a module C FFI available in the contrib package.
263+
264+C heap
265+------
266+
267+Idris has two heaps where objects can be allocated:
268+
269++--------------------------------------+---------------------------------------+
270+| FP heap | C heap |
271++======================================+=======================================+
272+| Cheney-collected | Mark-and-sweep-collected |
273++--------------------------------------+---------------------------------------+
274+| Garbage collections touches only | Garbage collection has to traverse |
275+| live objects. | all registered items. |
276++--------------------------------------+---------------------------------------+
277+| Ideal for FP-style rapid allocation | Ideal for C-style allocation of a few |
278+| of lots of small short-lived pieces | big buffers. |
279+| of memory, such as data constructors.| |
280++--------------------------------------+---------------------------------------+
281+| Finalizers are impossible to support | Items have finalizers that are called |
282+| reasonably. | on deallocation. |
283++--------------------------------------+---------------------------------------+
284+| Data is copied all the time (when | Copying does not happen. |
285+| collecting garbage, modifying data, | |
286+| registering managed pointers, etc.) | |
287++--------------------------------------+---------------------------------------+
288+| Contains objects of various types. | Contains C heap items: ``(void *)`` |
289+| | pointers with finalizers. A finalizer |
290+| | is a routine that deallocates the |
291+| | resources associated with the item. |
292++--------------------------------------+---------------------------------------+
293+| Fixed set of object types. | The data pointer may point |
294+| | to anything, as long as the finalizer |
295+| | cleans up correctly. |
296++--------------------------------------+---------------------------------------+
297+| Not suitable for C resources and | Suitable for C resources and arbitrary|
298+| arbitrary pointers. | pointers. |
299++--------------------------------------+---------------------------------------+
300+| Values form a compact memory block. | Items are kept in a linked list. |
301++--------------------------------------+---------------------------------------+
302+| Any Idris value, most notably | Items represented by the |
303+| ``ManagedPtr``. | Idris type ``CData``. |
304++--------------------------------------+---------------------------------------+
305+| Data of ``ManagedPtr`` allocated | Data allocated in C, pointer copied |
306+| in C, buffer then copied into the FP | into the C heap. |
307+| heap. | |
308++--------------------------------------+---------------------------------------+
309+| Allocation and reallocation not | Allocated and reallocate freely in C, |
310+| possible from C code (without having | registering the allocated items |
311+| a reference to the VM). Everything | in the FFI. |
312+| is copied instead. | |
313++--------------------------------------+---------------------------------------+
314+
315+The FP heap is the primary heap. It may contain values of type ``CData``,
316+which are references to items in the C heap. A C heap item contains
317+a ``(void *)`` pointer and the corresponding finalizer. Once a C heap item
318+is no longer referenced from the FP heap, it is marked as unused and
319+the next GC sweep will call its finalizer and deallocate it.
320+
321+There is no Idris interface for ``CData`` other than its type and FFI.
322+
323+Usage from C code
324+~~~~~~~~~~~~~~~~~
325+
326+* Although not enforced in code, ``CData`` is meant to be opaque
327+ and non-RTS code (such as libraries or C bindings) should
328+ access only its ``(void *)`` field called ``data``.
329+
330+* Feel free to mutate both the pointer ``data`` (eg. after calling ``realloc``)
331+ and the memory it points to. However, keep in mind
332+ that this must not break Idris's referential transparency.
333+
334+* **WARNING!** If you call ``cdata_allocate`` or ``cdata_manage``,
335+ the resulting ``CData`` object *must* be returned from your
336+ FFI function so that it is inserted in the C heap by the RTS.
337+ Otherwise the memory will be leaked.
338+
339+.. code:: idris
340+
341+ some_allocating_fun : Int -> IO CData
342+ some_allocating_fun i = foreign FFI_C "some_allocating_fun" (Int -> IO CData) i
343+
344+ other_fun : CData -> Int -> IO Int
345+ other_fun cd i = foreign FFI_C "other_fun" (CData -> Int -> IO Int) cd i
346+
347+.. code:: cpp
348+
349+ #include "idris_rts.h"
350+
351+ static void finalizer(void * data)
352+ {
353+ MyStruct * ptr = (MyStruct *) data;
354+ free_something(ptr->something);
355+ free(ptr);
356+ }
357+
358+ CData some_allocating_fun(int arg)
359+ {
360+ size_t size = sizeof(...);
361+ void * data = (void *) malloc(size);
362+ // ...
363+ return cdata_manage(data, size, finalizer);
364+ }
365+
366+ int other_fun(CData cd, int arg)
367+ {
368+ int result = foo(cd->data);
369+ return result;
370+ }
371+
372+The ``Raw`` type constructor allows you to access or return a runtime
373+representation of the value. For instance, if you want to copy a string
374+generated from C code into an Idris value, you may want to return a
375+``Raw String`` instead of a ``String`` and use ``MKSTR`` or ``MKSTRlen`` to
376+copy it over.
377+
378+.. code-block:: idris
379+
380+ getString : () -> IO (Raw String)
381+ getString () = foreign FFI_C "get_string" (IO (Raw String))
382+
383+.. code-block:: cpp
384+
385+ const VAL get_string ()
386+ {
387+ char * c_string = get_string_allocated_with_malloc()
388+ const VAL idris_string = MKSTR(get_vm(), c_string);
389+ free(c_string);
390+ return idris_string
391+ }
392+
138393FFI implementation
139394------------------
140395
141396In order to write bindings to external libraries, the details of how
142−``foreign`` works are unnecessary --- you simply need to know that
397+``foreign`` works are unnecessary: you simply need to know that
143398``foreign`` takes an FFI descriptor, the function name, and its
144399type. It is instructive to look a little deeper, however:
145400
@@ -256,7 +511,7 @@ follows:
256511
257512 data JS_Types : Type -> Type where
258513 JS_Str : JS_Types String
259− JS_Float : JS_Types Float
514+ JS_Float : JS_Types Double
260515 JS_Ptr : JS_Types Ptr
261516 JS_Unit : JS_Types ()
262517 JS_FnT : JS_FnTypes a -> JS_Types (JsFn a)
@@ -276,4 +531,4 @@ timeouts:
276531 timeout <- jscall "setTimeout(%0, %1)"
277532 (JsFn (() -> JS_IO ()) -> Int -> JS_IO Ptr)
278533 (MkJsFn f) millis
279− return $ MkTimeout timeout
534+ pure $ MkTimeout timeout
docs/reference/ide-protocol.rst+32−19
@@ -40,19 +40,16 @@ The syntax is::
4040where ``NUM`` is either 0 or a positive integer, ``ALPHA`` is an alphabetical character, and ``STR`` is the contents of a string, with ``"`` escaped by a backslash.
4141The atom ``nil`` is accepted instead of ``()`` for compatibility with some regexp pretty-printing routines.
4242
43−The state of the Idris process is mainly the active file, which needs to be kept synchronized between the editor and Idris.
43+The state of the Idris process is mainly the active file, which needs to be kept synchronised between the editor and Idris.
4444This is achieved by the already seen ``:load-file`` command.
4545
4646The available commands include:
4747
48− ``(:load-file FILENAME)``
49− Load the named file
48+ ``(:load-file FILENAME [LINE])``
49+ Load the named file. If a ``LINE`` number is provided, the file is only loaded up to that line. Otherwise, the entire file is loaded.
5050
5151 ``(:interpret STRING)``
52− Interpret ``STRING`` at the Idris REPL, returning a highlighted result
53−
54− ``(:repl-completions STRING)``
55− Return the result of tab-completing ``STRING`` as a REPL command
52+ Interpret ``STRING`` at the Idris REPL, returning a highlighted result.
5653
5754 ``(:type-of STRING)``
5855 Return the type of the name, written with Idris syntax in the ``STRING``.
@@ -77,27 +74,37 @@ The available commands include:
7774 Create a with-rule pattern match template for the clause of function ``NAME`` on line ``LINE``.
7875 The new code is returned with no highlighting.
7976
77+ ``(:make-case LINE NAME)``
78+ Create a case pattern match template for the clause of function ``NAME`` on line ``LINE``.
79+ The new code is returned with no highlighting.
80+
81+ ``(:make-lemma LINE NAME)``
82+ Create a top level function with a type which solves the hole named ``NAME`` on line ``LINE``.
83+
8084 ``(:proof-search LINE NAME HINTS)``
81− Attempt to fill out the holes on ``LINE```named ``NAME`` by proof search.
85+ Attempt to fill out the holes on ``LINE`` named ``NAME`` by proof search.
8286 ``HINTS`` is a possibly-empty list of additional things to try while searching.
8387
84− ``(:docs-for NAME)``
85− Look up the documentation for ``NAME``, and return it as a highlighted string.
86−
88+ ``(:docs-for NAME [MODE])``
89+ Look up the documentation for ``NAME``, and return it as a highlighted string. If ``MODE`` is ``:overview``, only the first paragraph of documentation is provided for ``NAME``. If ``MODE`` is ``:full``, or omitted, the full documentation is returned for ``NAME``.
90+
91+ ``(:apropos STRING)``
92+ Search the documentation for mentions of ``STRING``, and return any found as a list of highlighted strings.
93+
8794 ``(:metavariables WIDTH)``
8895 List the currently-active holes, with their types pretty-printed with ``WIDTH`` columns.
8996
9097 ``(:who-calls NAME)``
91− Get a list of callers of ``NAME``
98+ Get a list of callers of ``NAME``.
9299
93100 ``(:calls-who NAME)``
94− Get a list of callees of ``NAME``
101+ Get a list of callees of ``NAME``.
95102
96103 ``(:browse-namespace NAMESPACE)``
97− Return the contents of ``NAMESPACE``, like ``:browse`` at the command-line REPL
104+ Return the contents of ``NAMESPACE``, like ``:browse`` at the command-line REPL.
98105
99106 ``(:normalise-term TM)``
100− Return a highlighted string consisting of the results of normalising the serialised term ``TM`` (which would previously have been sent as the ``tt-term`` property of a string)
107+ Return a highlighted string consisting of the results of normalising the serialised term ``TM`` (which would previously have been sent as the ``tt-term`` property of a string).
101108
102109 ``(:show-term-implicits TM)``
103110 Return a highlighted string consisting of the results of making all arguments in serialised term ``TM`` (which would previously have been sent as the ``tt-term`` property of a string) explicit.
@@ -106,10 +113,16 @@ The available commands include:
106113 Return a highlighted string consisting of the results of making all arguments in serialised term ``TM`` (which would previously have been sent as the ``tt-term`` property of a string) follow their usual implicitness setting.
107114
108115 ``(:elaborate-term TM)``
109− Return a highlighted string consisting of the the core language term corresponding to serialised term ``TM`` (which would previously have been sent as the ``tt-term`` property of a string).
116+ Return a highlighted string consisting of the core language term corresponding to serialised term ``TM`` (which would previously have been sent as the ``tt-term`` property of a string).
110117
111118 ``(:print-definition NAME)``
112− Return the definition of ``NAME`` as a highlighted string
119+ Return the definition of ``NAME`` as a highlighted string.
120+
121+ ``(:repl-completions NAME)``
122+ Search names, types and documentations which contain ``NAME``. Return the result of tab-completing ``NAME`` as a REPL command.
123+
124+ ``:version``
125+ Return the version information of the Idris compiler.
113126
114127
115128
@@ -184,12 +197,12 @@ The following keys are available:
184197 states that the region is antiquoted.
185198
186199 ``tt-term``
187− A serialized representation of the Idris core term corresponding to the region of text.
200+ A serialised representation of the Idris core term corresponding to the region of text.
188201
189202Source Code Highlighting
190203------------------------
191204
192−Idris supports instructing editors how to color their code.
205+Idris supports instructing editors how to colour their code.
193206When elaborating source code or REPL input, Idris will locate regions of the source code corresponding to names, and emit information about these names using the same metadata as output highlighting.
194207
195208These messages will arrive as replies to the command that caused elaboration to occur, such as ``:load-file`` or ``:interpret``.
docs/reference/index.rst+6−2
@@ -14,24 +14,28 @@ This will tell you how Idris works, for using it you should read the Idris Tutor
1414 Idris Community* has waived all copyright and related or neighboring
1515 rights to Documentation for Idris.
1616
17− More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
17+ More information concerning the CC0 can be found online at: https://creativecommons.org/publicdomain/zero/1.0/
1818
1919
2020.. toctree::
2121 :maxdepth: 1
2222
23+ codegen
2324 documenting
2425 packages
2526 uniqueness-types
2627 ffi
2728 syntax-guide
29+ syntax-reference
2830 erasure
2931 ide-protocol
3032 semantic-highlighting
3133 tactics
3234 repl
3335 compilation
36+ internals
3437 language-features
3538 language-extensions
36− elaborator-reflection
39+ type-directed-search
40+ partial-evaluation
3741 misc
docs/reference/internals.rstnew file+179
@@ -0,0 +1,179 @@
1+*****************
2+Idris' Internals
3+*****************
4+
5+Note: this is still a fairly raw set of notes taken by David
6+Christiansen at Edwin's presentation at the 2013 Idris Developers
7+Meeting. They're in the process of turning into a useful guide - feel
8+free to contribute.
9+
10+This document assumes that you are already familiar with Idris. It is
11+intended for those who want to work on the internals.
12+
13+People looking to develop new back ends may want to look at
14+:ref:`code-generation-targets`
15+
16+Core/TT.hs
17+==========
18+
19+Idris is compiled to a simple, explicit core language. This core
20+language is called TT because it looks a bit like a Π. It's a minimal
21+language, with a locally nameless representation. That is, local
22+variables are represented with de Bruijn indices and globally-defined
23+constants are represented with names.
24+
25+The ``TT`` datatype uses a trick that is common in the Idris code: it is
26+polymorphic over the type of names stored in it, and it derives
27+``Functor``. This allows ``fmap`` to be used as a general-purpose
28+traversal.
29+
30+There is a general construction for binders, used for λ, Π, and
31+let-bindings. These are distinguished using a ``BinderType``.
32+
33+During compilation, some terms (especially types) will be erased. This
34+is represented using the ``Erased`` constructor of ``TT``. A handy trick
35+when generating TT terms is to insert ``Erased`` where a term is
36+uniquely determined, as the typechecker will fill it out.
37+
38+The constructor ``Proj`` is a result of the optimizer. It is used to
39+extract a specific constructor argument, in a more economical way than
40+defining a new pattern-matching operation.
41+
42+The datatype ``Raw`` represents terms that have not yet been
43+typechecked. The typechecker converts a ``Raw`` to a ``TT`` if it can.
44+
45+Core/CaseTree.hs
46+================
47+
48+Case trees are used to represent top-level pattern-matching definitions
49+in the TT language.
50+
51+Just as with the ``TT`` datatype, the ``deriving Functor`` trick is used
52+with ``SC`` and ``CaseAlt`` to get GHC to generate a function for
53+mapping over contained terms.
54+
55+Constructor cases (``ConCase`` in ``CaseAlt``) refer to numbered
56+constructors. Every constructor is numbered *0,1,2,…*. At this stage in
57+the compiler, the tags are datatype-local. After defunctionalization,
58+however, they are made globally unique.
59+
60+The ``n+1`` patterns (``SucCase``) and hacky-seeming things are to make
61+code fast -- please ask before "cleaning up" the representation.
62+
63+Core/Evaluate.hs
64+================
65+
66+This module contains the main evaluator for Idris. The evaluator is used
67+both at the REPL and during type checking, where normalised terms need
68+to be compared for equality.
69+
70+A key datatype in the evaluator is a *context*. Contexts are mappings
71+from global names to their values, but they are organized to make
72+type-directed disambiguation quick. In particular, the main part of a
73+name that a user might type is used as the key, and its values are maps
74+from namespaces to actual values.
75+
76+The datatype ``Def`` represents a definition in the global context. All
77+global names map to this structure.
78+
79+``Type`` and ``Term`` are both synonyms for ``TT``.
80+
81+Datatypes are represented by a ``TyDecl`` with the appropriate
82+``NameType``. A ``Function`` is a global constant term with an annotated
83+type, ``Operator`` represents primitives implemented in Haskell, and
84+``CaseOp`` represents ordinary pattern-matching definitions. ``CaseOp``
85+has four versions for different purposes, and all are saved because
86+that's easiest.
87+
88+``CaseInfo``: the ``tc_dictionary`` is because it's a type class
89+dictionary which makes totality checking easier.
90+
91+The ``normalise*`` functions give different behaviors - but
92+``normalise`` is the most common.
93+
94+- ``normaliseC`` - "resolved" means with names converted to de Bruijn
95+ indices as appropriate;
96+
97+- ``normaliseAll`` - reduce everything, even if it's non-total;
98+
99+- ``normaliseTrace`` - special-purpose for debugging.
100+
101+``simplify`` - reduce the things that are small - the list argument is
102+the things to not reduce.
103+
104+Core/Typecheck.hs
105+=================
106+
107+Standard stuff. Hopefully no changes are necessary.
108+
109+Core/Elaborate.hs
110+=================
111+
112+Idris definitions are elaborated one by one and turned into the
113+corresponding ``TT``. This is done with a tactic language as an EDSL in the
114+``Elab`` monad (or ``Elab'`` when there's a custom state).
115+
116+Lots of plumbing for errors.
117+
118+All elaboration is relative to a global context.
119+
120+The string in the pair returned by elaborate is log information.
121+
122+See JFP paper, but the names don't necessarily map to each other. The
123+paper is the "idealized version" without logging, additional state, etc.
124+
125+All the tactics take ``Raw`` s, typechecking happens there.
126+
127+``claim (x : t)`` assumes a new ``x : t``.
128+
129+PLEASE TIDY THINGS UP!
130+
131+``proofSearch`` flag is to try whether the failure came from a human (so
132+fail) or from a machine (so continue)
133+
134+Idris-level syntax for providing alternatives explicitly: ``(| x, y, z
135+|)`` try ``x``, ``y``, ``z`` in order, and take the first that succeeds.
136+
137+Core/ProofState.hs
138+==================
139+
140+Core/Unify.hs
141+=============
142+
143+Deals with unification. Unification can reply with:
144+
145+- this works
146+- this can never work
147+- this will work if these other unification problems work out (e.g.
148+ unifying ``f x`` with ``1``)
149+
150+``match_unify``: same thing as unification except it's just matching name
151+against name, term against term. ``x + y`` matches to ``0 + y`` with
152+``x = 0``. Used for ``<==`` syntax as well as type class resolution.
153+
154+Idris/AbsSyntaxTree.hs
155+======================
156+
157+``PTerm`` is the datatype of Idris syntax. ``P`` is for *Program*.
158+Each ``PTerm`` turns into a TT term by applying a series of tactics.
159+
160+``IState`` is the major interpreter state. The global context is the
161+``tt_ctxt`` field.
162+
163+``Ctxt`` maps possibly ambiguous names to their referents.
164+
165+Idris/ElabDecls.hs
166+==================
167+
168+This is where the actual elaboration from ``PTerm`` to ``TT`` happens.
169+
170+Idris/ElabTerm.hs
171+=================
172+
173+``build`` is the function that creates a ``Raw``. All the "junk" is to deal with
174+things like metavars and so forth. It has to remember what names are
175+still to be defined, and it doesn't yet know the type (filled in by
176+unificaiton later). Also case expressions have to turn into top-level
177+functions.
178+
179+``resolveTC`` is type class resolution.
docs/reference/language-extensions.rst+8−3
@@ -3,13 +3,12 @@ Language Extensions
33*******************
44
55
6−
76Type Providers
87===============
98
109Idris type providers are a way to get the type system to reflect
1110observations about the world outside of Idris. Similarly to `F# type
12−providers <http://msdn.microsoft.com/en-us/library/vstudio/hh156509.aspx>`__,
11+providers <https://msdn.microsoft.com/en-us/library/vstudio/hh156509.aspx>`__,
1312they cause effectful computations to run during type checking, returning
1413information that the type checker can use when checking the rest of the
1514program. While F# type providers are based on code generation, Idris
@@ -32,5 +31,11 @@ to the user.
3231Example Idris type providers can be seen at `this
3332repository <https://github.com/david-christiansen/idris-type-providers>`__.
3433More detailed descriptions are available in David Christiansen's `WGP
35−'13 paper <http://dx.doi.org/10.1145/2502488.2502495>`__ and `M.Sc.
34+'13 paper <https://dx.doi.org/10.1145/2502488.2502495>`__ and `M.Sc.
3635thesis <http://itu.dk/people/drc/david-christiansen-thesis.pdf>`__.
36+
37+Elaborator Reflection
38+=====================
39+
40+Another way to extend the language is elaborator reflection which is described
41+in the :ref:`elaborator-index` section.
docs/reference/language-features.rst+3−3
@@ -27,7 +27,7 @@ Core Language Features
2727- Heterogeneous equality
2828- ``do`` notation
2929- Idiom brackets
30−- Type classes, suppoting default methods and dependencies between
30+- Interfaces (like type classes), supporting default methods and dependencies between
3131 methods
3232- ``rewrite`` prf ``in`` expr
3333- Metavariables
@@ -35,7 +35,7 @@ Core Language Features
3535- Implicit coercion
3636- ``codata``
3737- Also ``Inf : Type -> Type`` type constructor for mixed data/codata.
38− In fact ``codata`` is implemented by putting recusive arguments under
38+ In fact ``codata`` is implemented by putting recursive arguments under
3939 ``Inf``.
4040- ``syntax`` rules for defining pattern and term syntactic sugar
4141- these are used in the standard library to define
@@ -46,7 +46,7 @@ Core Language Features
4646 using the ``UniqueType`` universe.
4747- `Partial
4848 evaluation <https://github.com/idris-lang/Idris-dev/wiki/Static-Arguments-and-Partial-Evaluation>`__
49− by ``[static]`` argument annotations.
49+ by ``%static`` argument annotations.
5050- Error message reflection
5151- Eliminators
5252- Label types ``'name``
docs/reference/misc.rst+36−13

This diff is too big to show here.

docs/reference/packages.rst+58−9

This diff is too big to show here.

docs/reference/partial-evaluation.rstnew file+305

This diff is too big to show here.

docs/reference/repl.rst+34−20

This diff is too big to show here.

docs/reference/syntax-guide.rst+222−8

This diff is too big to show here.

docs/reference/syntax-reference.rstnew file+422

This diff is too big to show here.

docs/reference/tactics.rst+14−23

This diff is too big to show here.

docs/reference/type-directed-search.rstnew file+336

This diff is too big to show here.

docs/reference/uniqueness-types.rst+6−6

This diff is too big to show here.

docs/st/composing.rstnew file+774

This diff is too big to show here.

docs/st/examples.rstnew file+439

This diff is too big to show here.

docs/st/index.rstnew file+27

This diff is too big to show here.

docs/st/introduction.rstnew file+93

This diff is too big to show here.

docs/st/machines.rstnew file+536

This diff is too big to show here.

docs/st/state.rstnew file+654

This diff is too big to show here.

docs/tutorial/conclusions.rst+6−6

This diff is too big to show here.

docs/tutorial/index.rst+6−4

This diff is too big to show here.

docs/tutorial/interactive.rst+8−9

This diff is too big to show here.

docs/tutorial/classes.rst → docs/tutorial/interfaces.rstrenamed+221−105

This diff is too big to show here.

docs/tutorial/interp.rst+29−17

This diff is too big to show here.

docs/tutorial/introduction.rst+10−5

This diff is too big to show here.

docs/tutorial/miscellany.rst+56−21

This diff is too big to show here.

docs/tutorial/modules.rst+87−56

This diff is too big to show here.

docs/tutorial/packages.rst+143−23

This diff is too big to show here.

docs/tutorial/provisional.rst+14−14

This diff is too big to show here.

docs/tutorial/starting.rst+4−1

This diff is too big to show here.

docs/tutorial/syntax.rst+17−17

This diff is too big to show here.

docs/tutorial/testing.rstdeleted−65

This diff is too big to show here.

docs/tutorial/theorems.rst+146−7

This diff is too big to show here.

docs/tutorial/typesfuns.rst+448−225

This diff is too big to show here.

docs/tutorial/views.rst+77−19

This diff is too big to show here.

icons/idris.iconew file

Binary file not shown.

icons/idris_icon.rcnew file+1

This diff is too big to show here.

idris-tutorial.pdf

Binary file not shown.

idris.cabal+227−757

This diff is too big to show here.

iif/adder.iifdeleted−30

This diff is too big to show here.

iif/big.iifdeleted−7

This diff is too big to show here.

iif/ctest.cdeleted−106

This diff is too big to show here.

iif/lazy.iifdeleted−21

This diff is too big to show here.

iif/testmap.iifdeleted−30

This diff is too big to show here.

iif/testvm.iifdeleted−32

This diff is too big to show here.

jsrts/Runtime-browser.jsdeleted−14

This diff is too big to show here.

jsrts/Runtime-common.js+21−102

This diff is too big to show here.

jsrts/Runtime-javascript.jsnew file+15

This diff is too big to show here.

jsrts/Runtime-node.js+38−15

This diff is too big to show here.

jsrts/jsbn/jsbn-browser.jsnew file+1353

This diff is too big to show here.

jsrts/jsbn/jsbn-node.jsnew file+1

This diff is too big to show here.

jsrts/jsbn/jsbn.jsdeleted−1238

This diff is too big to show here.

libs/Makefile+6−2

This diff is too big to show here.

libs/base/Control/Arrow.idr+19−19

This diff is too big to show here.

libs/base/Control/Catchable.idr+35−10

This diff is too big to show here.

libs/base/Control/Category.idr+8−6

This diff is too big to show here.

libs/base/Control/IOExcept.idr+20−24

This diff is too big to show here.

libs/base/Control/Isomorphism.idr+38−29

This diff is too big to show here.

libs/base/Control/Monad/Identity.idr+26−5

This diff is too big to show here.

libs/base/Control/Monad/RWS.idr+27−21

This diff is too big to show here.

libs/base/Control/Monad/Reader.idr+10−10

This diff is too big to show here.

libs/base/Control/Monad/State.idr+28−24

This diff is too big to show here.

libs/base/Control/Monad/Trans.idr+3−1

This diff is too big to show here.

libs/base/Control/Monad/Writer.idr+19−16

This diff is too big to show here.

libs/base/Data/Bits.idr+163−92

This diff is too big to show here.

libs/base/Data/Buffer.idrnew file+170

This diff is too big to show here.

libs/base/Data/Complex.idr+29−25

This diff is too big to show here.

libs/base/Data/Erased.idr+4−4

This diff is too big to show here.

libs/base/Data/Fin.idr+35−31

This diff is too big to show here.

libs/base/Data/Floats.idrdeleted−59

This diff is too big to show here.

libs/base/Data/HVect.idr+18−19

This diff is too big to show here.

libs/base/Data/IORef.idrnew file+61

This diff is too big to show here.

libs/base/Data/List.idr+36−13

This diff is too big to show here.

libs/base/Data/List/Quantifiers.idrnew file+82

This diff is too big to show here.

libs/base/Data/List/Views.idrnew file+223

This diff is too big to show here.

libs/base/Data/Mod2.idr+14−16

This diff is too big to show here.

libs/base/Data/Morphisms.idr+54−26

This diff is too big to show here.

libs/base/Data/Nat/Views.idrnew file+34

This diff is too big to show here.

libs/base/Data/Primitives/Views.idrnew file+81

This diff is too big to show here.

libs/base/Data/So.idr+13−2

This diff is too big to show here.

libs/base/Data/SortedSet.idrdeleted−28

This diff is too big to show here.

libs/base/Data/String.idrnew file+114

This diff is too big to show here.

libs/base/Data/String/Views.idrnew file+15

This diff is too big to show here.

libs/base/Data/Vect.idr+1011−9

This diff is too big to show here.

libs/base/Data/Vect/Quantifiers.idr+4−1

This diff is too big to show here.

libs/base/Data/Vect/Views.idrnew file+83

This diff is too big to show here.

libs/base/Data/VectType.idrdeleted−596

This diff is too big to show here.

libs/base/Debug/Error.idr+5−8

This diff is too big to show here.

libs/base/Debug/Trace.idr+2−1

This diff is too big to show here.

libs/base/Language/Reflection/Utils.idr+148−97

This diff is too big to show here.

libs/base/Makefile+4−3

This diff is too big to show here.

libs/base/Syntax/PreorderReasoning.idr+2

This diff is too big to show here.

libs/base/System.idr+58−28

This diff is too big to show here.

libs/base/System/Concurrency/Channels.idrnew file+70

This diff is too big to show here.

libs/base/System/Concurrency/Raw.idr+78−45

This diff is too big to show here.

libs/base/System/Info.idr+3

This diff is too big to show here.

libs/base/System/Interactive.idrdeleted−73

This diff is too big to show here.

libs/base/base.ipkg+51−29

This diff is too big to show here.

libs/contrib/CFFI.idrnew file+4

This diff is too big to show here.

libs/contrib/CFFI/Memory.idrnew file+99

This diff is too big to show here.

libs/contrib/CFFI/Types.idrnew file+161

This diff is too big to show here.

libs/contrib/Classes/Verified.idrdeleted−117

This diff is too big to show here.

libs/contrib/Control/Algebra.idr+31−16

This diff is too big to show here.

libs/contrib/Control/Algebra/Lattice.idr+28−11

This diff is too big to show here.

libs/contrib/Control/Algebra/Laws.idrnew file+153

This diff is too big to show here.

libs/contrib/Control/Algebra/NumericImplementations.idrnew file+134

This diff is too big to show here.

libs/contrib/Control/Algebra/NumericInstances.idrdeleted−104

This diff is too big to show here.

libs/contrib/Control/Algebra/VectorSpace.idr+5−3

This diff is too big to show here.

libs/contrib/Control/Delayed.idrnew file+26

This diff is too big to show here.

libs/contrib/Control/Isomorphism/Extra.idrnew file+42

This diff is too big to show here.

libs/contrib/Control/Isomorphism/Fin.idrnew file+54

This diff is too big to show here.

libs/contrib/Control/Isomorphism/Primitives.idr+1−1

This diff is too big to show here.

libs/contrib/Control/Isomorphism/Vect.idrnew file+155

This diff is too big to show here.

libs/contrib/Control/Monad/Syntax.idrnew file+18

This diff is too big to show here.

libs/contrib/Control/Partial.idr+1−1

This diff is too big to show here.

libs/contrib/Control/Pipeline.idrnew file+26

This diff is too big to show here.

libs/contrib/Control/ST.idrnew file+660

This diff is too big to show here.

libs/contrib/Control/ST/Exception.idrnew file+38

This diff is too big to show here.

libs/contrib/Control/ST/File.idrnew file+247

This diff is too big to show here.

libs/contrib/Control/ST/ImplicitCall.idrnew file+13

This diff is too big to show here.

libs/contrib/Control/ST/Random.idrnew file+42

This diff is too big to show here.

libs/contrib/Data/Bool/Extra.idrnew file+82

This diff is too big to show here.

libs/contrib/Data/BoundedList.idr+32−3

This diff is too big to show here.

libs/contrib/Data/Chain.idrnew file+46

This diff is too big to show here.

libs/contrib/Data/CoList.idr+6−6

This diff is too big to show here.

libs/contrib/Data/Combinators.idrnew file+38

This diff is too big to show here.

libs/contrib/Data/Combinators/Applicative.idrnew file+27

This diff is too big to show here.

libs/contrib/Data/Combinators/Arrow.idrnew file+15

This diff is too big to show here.

libs/contrib/Data/Fin/Extra.idrnew file+86

This diff is too big to show here.

libs/contrib/Data/Fuel.idrnew file+18

This diff is too big to show here.

libs/contrib/Data/Fun.idr+1

This diff is too big to show here.

libs/contrib/Data/Hash.idr+16−16

This diff is too big to show here.

libs/contrib/Data/Heap.idr+18−32

This diff is too big to show here.

libs/contrib/Data/IOArray.idrnew file+47

This diff is too big to show here.

libs/contrib/Data/List/Group.idrnew file+27

This diff is too big to show here.

libs/contrib/Data/List/Permutations.idrnew file+12

This diff is too big to show here.

libs/contrib/Data/List/Reverse.idrnew file+99

This diff is too big to show here.

libs/contrib/Data/List/Zipper.idrnew file+160

This diff is too big to show here.

libs/contrib/Data/Logic/Propositional.idrnew file+161

This diff is too big to show here.

libs/contrib/Data/Matrix.idr+33−124

This diff is too big to show here.

libs/contrib/Data/Matrix/Algebraic.idrnew file+149

This diff is too big to show here.

libs/contrib/Data/Matrix/Numeric.idrnew file+135

This diff is too big to show here.

libs/contrib/Data/Monoid.idrnew file+33

This diff is too big to show here.

libs/contrib/Data/Nat.idr+17−158

This diff is too big to show here.

libs/contrib/Data/Nat/Ack.idrnew file+60

This diff is too big to show here.

libs/contrib/Data/Nat/DivMod.idrnew file+61

This diff is too big to show here.

libs/contrib/Data/Nat/DivMod/IteratedSubtraction.idrnew file+165

This diff is too big to show here.

libs/contrib/Data/Nat/Fact.idrnew file+56

This diff is too big to show here.

libs/contrib/Data/Nat/Fib.idrnew file+50

This diff is too big to show here.

libs/contrib/Data/Nat/Parity.idrnew file+217

This diff is too big to show here.

libs/contrib/Data/Pairs/Implicit.idrnew file+13

This diff is too big to show here.

libs/contrib/Data/PosNat.idrnew file+57

This diff is too big to show here.

libs/contrib/Data/Rel.idr+1

This diff is too big to show here.

libs/contrib/Data/Sign.idr+32−1

This diff is too big to show here.

libs/contrib/Data/SortedBag.idrnew file+127

This diff is too big to show here.

libs/contrib/Data/SortedMap.idr+74−11

This diff is too big to show here.

libs/contrib/Data/SortedSet.idr+41−10

This diff is too big to show here.

libs/contrib/Data/Storable.idrnew file+41

This diff is too big to show here.

libs/contrib/Data/Stream/Extra.idrnew file+10

This diff is too big to show here.

libs/contrib/Data/String.idrdeleted−31

This diff is too big to show here.

libs/contrib/Data/String/Extra.idrnew file+88

This diff is too big to show here.

libs/contrib/Data/ZZ.idr+229−28

This diff is too big to show here.

libs/contrib/Decidable/Decidable.idr+4−4

This diff is too big to show here.

libs/contrib/Decidable/Order.idr+17−17

This diff is too big to show here.

libs/contrib/Interfaces/Correlative.idrnew file+63

This diff is too big to show here.

libs/contrib/Interfaces/Proposition.idrnew file+32

This diff is too big to show here.

libs/contrib/Interfaces/Verified.idrnew file+359

This diff is too big to show here.

libs/contrib/Language/JSON.idrnew file+14

This diff is too big to show here.

libs/contrib/Language/JSON/Data.idrnew file+98

This diff is too big to show here.

libs/contrib/Language/JSON/Lexer.idrnew file+40

This diff is too big to show here.

libs/contrib/Language/JSON/Parser.idrnew file+71

This diff is too big to show here.

libs/contrib/Language/JSON/String.idrnew file+16

This diff is too big to show here.

libs/contrib/Language/JSON/String/Lexer.idrnew file+38

This diff is too big to show here.

libs/contrib/Language/JSON/String/Parser.idrnew file+25

This diff is too big to show here.

libs/contrib/Language/JSON/String/Tokens.idrnew file+60

This diff is too big to show here.

libs/contrib/Language/JSON/Tokens.idrnew file+72

This diff is too big to show here.

libs/contrib/Makefile+4−3

This diff is too big to show here.

libs/contrib/Network/Cgi.idr+32−30

This diff is too big to show here.

libs/contrib/Network/Socket.idr+195−317

This diff is too big to show here.

libs/contrib/Network/Socket/Data.idrnew file+172

This diff is too big to show here.

libs/contrib/Network/Socket/Raw.idrnew file+199

This diff is too big to show here.

libs/contrib/System/Concurrency/Process.idr+30−18

This diff is too big to show here.

libs/contrib/Test/Unit.idrnew file+14

This diff is too big to show here.

libs/contrib/Test/Unit/Assertions.idrnew file+37

This diff is too big to show here.

libs/contrib/Test/Unit/Display.idrnew file+27

This diff is too big to show here.

libs/contrib/Test/Unit/Generic.idrnew file+43

This diff is too big to show here.

libs/contrib/Test/Unit/Runners.idrnew file+36

This diff is too big to show here.

libs/contrib/Text/Lexer.idrnew file+324

This diff is too big to show here.

libs/contrib/Text/Lexer/Core.idrnew file+193

This diff is too big to show here.

libs/contrib/Text/Literate.idrnew file+155

This diff is too big to show here.

libs/contrib/Text/Parser.idrnew file+226

This diff is too big to show here.

libs/contrib/Text/Parser/Core.idrnew file+265

This diff is too big to show here.

libs/contrib/Text/PrettyPrint/WL.idrnew file+18

This diff is too big to show here.

libs/contrib/Text/PrettyPrint/WL/Characters.idrnew file+103

This diff is too big to show here.

libs/contrib/Text/PrettyPrint/WL/Combinators.idrnew file+259

This diff is too big to show here.

libs/contrib/Text/PrettyPrint/WL/Core.idrnew file+226

This diff is too big to show here.

libs/contrib/Text/Quantity.idrnew file+38

This diff is too big to show here.

libs/contrib/Text/Token.idrnew file+38

This diff is too big to show here.

libs/contrib/contrib.ipkg+111−22

This diff is too big to show here.

libs/effects/Effect/Default.idr+16−15

This diff is too big to show here.

libs/effects/Effect/Exception.idr+9−7

This diff is too big to show here.

libs/effects/Effect/File.idr+411−130

This diff is too big to show here.

libs/effects/Effect/Logging/Category.idrnew file+181

This diff is too big to show here.

libs/effects/Effect/Logging/Default.idrnew file+118

This diff is too big to show here.

libs/effects/Effect/Logging/Level.idrnew file+81

This diff is too big to show here.

libs/effects/Effect/Memory.idr+15−9

This diff is too big to show here.

libs/effects/Effect/Monad.idr+5−3

This diff is too big to show here.

libs/effects/Effect/Perf.idrnew file+230

This diff is too big to show here.

libs/effects/Effect/Random.idr+34−16

This diff is too big to show here.

libs/effects/Effect/Select.idr+4−2

This diff is too big to show here.

libs/effects/Effect/State.idr+3−3

This diff is too big to show here.

libs/effects/Effect/StdIO.idr+4−2

This diff is too big to show here.

libs/effects/Effect/System.idr+11−2

This diff is too big to show here.

libs/effects/Effect/Trans.idr+2−2

This diff is too big to show here.

libs/effects/Effects.idr+173−86

This diff is too big to show here.

libs/effects/Makefile+2−1

This diff is too big to show here.

libs/effects/effects.ipkg+19−5

This diff is too big to show here.

libs/oldeffects/Effect/Default.idrdeleted−44

This diff is too big to show here.

libs/oldeffects/Effect/Exception.idrdeleted−41

This diff is too big to show here.

libs/oldeffects/Effect/File.idrdeleted−128

This diff is too big to show here.

libs/oldeffects/Effect/Memory.idrdeleted−175

This diff is too big to show here.

libs/oldeffects/Effect/Monad.idrdeleted−21

This diff is too big to show here.

libs/oldeffects/Effect/Random.idrdeleted−47

This diff is too big to show here.

libs/oldeffects/Effect/Select.idrdeleted−23

This diff is too big to show here.

libs/oldeffects/Effect/State.idrdeleted−40

This diff is too big to show here.

libs/oldeffects/Effect/StdIO.idrdeleted−60

This diff is too big to show here.

libs/oldeffects/Effect/System.idrdeleted−43

This diff is too big to show here.

libs/oldeffects/Effects.idrdeleted−333

This diff is too big to show here.

libs/oldeffects/effects.ipkgdeleted−9

This diff is too big to show here.

libs/prelude/Builtins.idr+109−50

This diff is too big to show here.

libs/prelude/Decidable/Equality.idr+82−36

This diff is too big to show here.

libs/prelude/IO.idr+150−53

This diff is too big to show here.

libs/prelude/Language/Reflection.idr+801−175

This diff is too big to show here.

libs/prelude/Language/Reflection/Elab.idr+551−185

This diff is too big to show here.

libs/prelude/Language/Reflection/Errors.idr+5−3

This diff is too big to show here.

libs/prelude/Makefile+3−2

This diff is too big to show here.

libs/prelude/Prelude.idr+114−279

This diff is too big to show here.

libs/prelude/Prelude/Algebra.idr+6−8

This diff is too big to show here.

libs/prelude/Prelude/Applicative.idr+37−7

This diff is too big to show here.

libs/prelude/Prelude/Basics.idr+8−7

This diff is too big to show here.

libs/prelude/Prelude/Bits.idr+87−30

This diff is too big to show here.

libs/prelude/Prelude/Bool.idr+15−3

This diff is too big to show here.

libs/prelude/Prelude/Cast.idr+22−14

This diff is too big to show here.

libs/prelude/Prelude/Chars.idr+16−6

This diff is too big to show here.

libs/prelude/Prelude/Doubles.idrnew file+64

This diff is too big to show here.

libs/prelude/Prelude/Either.idr+16−6

This diff is too big to show here.

libs/prelude/Prelude/File.idrnew file+391

This diff is too big to show here.

libs/prelude/Prelude/Foldable.idr+26−6

This diff is too big to show here.

libs/prelude/Prelude/Functor.idr+24−13

This diff is too big to show here.

libs/prelude/Prelude/Interactive.idrnew file+180

This diff is too big to show here.

libs/prelude/Prelude/Classes.idr → libs/prelude/Prelude/Interfaces.idrrenamed+153−132

This diff is too big to show here.

libs/prelude/Prelude/List.idr+230−175

This diff is too big to show here.

libs/prelude/Prelude/Maybe.idr+43−15

This diff is too big to show here.

libs/prelude/Prelude/Monad.idr+38−11

This diff is too big to show here.

libs/prelude/Prelude/Nat.idr+207−395

This diff is too big to show here.

libs/prelude/Prelude/Pairs.idr+8−8

This diff is too big to show here.

libs/prelude/Prelude/Providers.idr+7−5

This diff is too big to show here.

libs/prelude/Prelude/Show.idr+48−39

This diff is too big to show here.

libs/prelude/Prelude/Stream.idr+23−23

This diff is too big to show here.

libs/prelude/Prelude/Strings.idr+132−42

This diff is too big to show here.

libs/prelude/Prelude/Traversable.idr+11−1

This diff is too big to show here.

libs/prelude/Prelude/Uninhabited.idr+4−2

This diff is too big to show here.

libs/contrib/Control/WellFounded.idr → libs/prelude/Prelude/WellFounded.idrrenamed+59−7

This diff is too big to show here.

libs/prelude/prelude.ipkg+36−10

This diff is too big to show here.

libs/oldeffects/Makefile → libs/pruviloj/Makefilerenamed+3−3

This diff is too big to show here.

libs/pruviloj/Pruviloj.idrnew file+8

This diff is too big to show here.

libs/pruviloj/Pruviloj/Core.idrnew file+331

This diff is too big to show here.

libs/pruviloj/Pruviloj/Derive/DecEq.idrnew file+196

This diff is too big to show here.

libs/pruviloj/Pruviloj/Derive/Eliminators.idrnew file+265

This diff is too big to show here.

libs/pruviloj/Pruviloj/Disjoint.idrnew file+125

This diff is too big to show here.

libs/pruviloj/Pruviloj/Induction.idrnew file+159

This diff is too big to show here.

libs/pruviloj/Pruviloj/Injective.idrnew file+122

This diff is too big to show here.

libs/pruviloj/Pruviloj/Internals.idrnew file+136

This diff is too big to show here.

libs/pruviloj/Pruviloj/Internals/TyConInfo.idrnew file+108

This diff is too big to show here.

libs/pruviloj/Pruviloj/Renamers.idrnew file+44

This diff is too big to show here.

libs/pruviloj/README.txtnew file+45

This diff is too big to show here.

libs/pruviloj/pruviloj.ipkgnew file+19

This diff is too big to show here.

main/Main.hs+71−93

This diff is too big to show here.

man/idris.1+48−15

This diff is too big to show here.

mkpkg.sh+48−7

This diff is too big to show here.

rts/Makefile+12−16

This diff is too big to show here.

rts/getline.c+32−31

This diff is too big to show here.

rts/idris_bitstring.c+284−517

This diff is too big to show here.

rts/idris_bitstring.h+10−5

This diff is too big to show here.

rts/idris_buffer.cnew file+146

This diff is too big to show here.

rts/idris_buffer.hnew file+29

This diff is too big to show here.

rts/idris_gc.c+70−65

This diff is too big to show here.

rts/idris_gmp.c+158−165

This diff is too big to show here.

rts/idris_gmp.h+16−2

This diff is too big to show here.

rts/idris_heap.c+137−30

This diff is too big to show here.

rts/idris_heap.h+85−3

This diff is too big to show here.

rts/idris_main.c+44−7

This diff is too big to show here.

rts/idris_net.c+61−30

This diff is too big to show here.

rts/idris_net.h+14

This diff is too big to show here.

rts/idris_opts.c+1−1

This diff is too big to show here.

rts/idris_opts.h+1−1

This diff is too big to show here.

rts/idris_rts.c+544−335

This diff is too big to show here.

rts/idris_rts.h+303−102

This diff is too big to show here.

rts/idris_stdfgn.c+230−19

This diff is too big to show here.

rts/idris_stdfgn.h+35−1

This diff is too big to show here.

rts/idris_utf8.c+38−2

This diff is too big to show here.

rts/idris_utf8.h+5−1

This diff is too big to show here.

rts/mini-gmp.c+459−167

This diff is too big to show here.

rts/mini-gmp.h+47−8

This diff is too big to show here.

rts/seL4/CMakeLists.txtnew file+43

This diff is too big to show here.

rts/seL4/README.mdnew file+5

This diff is too big to show here.

rts/seL4/idris_main.cnew file+31

This diff is too big to show here.

rts/windows/idris_net.cdeleted−196

This diff is too big to show here.

rts/windows/idris_stdfgn.cdeleted−82

This diff is too big to show here.

rts/windows/win_utils.c+49−3

This diff is too big to show here.

rts/windows/win_utils.hnew file+9

This diff is too big to show here.

samples/ST/Composite.idrnew file+8

This diff is too big to show here.

samples/ST/Graphics/Draw.idrnew file+88

This diff is too big to show here.

samples/ST/Graphics/Turtle.idrnew file+116

This diff is too big to show here.

samples/ST/Intro.idrnew file+75

This diff is too big to show here.

samples/ST/Login.idrnew file+55

This diff is too big to show here.

samples/ST/LoginCount.idrnew file+77

This diff is too big to show here.

samples/ST/Net/EchoSimple.idrnew file+24

This diff is too big to show here.

samples/ST/Net/Network.idrnew file+106

This diff is too big to show here.

samples/ST/Net/RandServer.idrnew file+156

This diff is too big to show here.

samples/ST/Net/Threads.idrnew file+23

This diff is too big to show here.

samples/ST/TreeTag.idrnew file+29

This diff is too big to show here.

samples/effects/Exception.idr+1−1

This diff is too big to show here.

samples/effects/TreeTag.idr+3−3

This diff is too big to show here.

samples/misc/binary.idr+2−2

This diff is too big to show here.

samples/misc/interp.idr+24−15

This diff is too big to show here.

samples/misc/named_instance.lidr → samples/misc/named_implementation.lidrrenamed+5−5

This diff is too big to show here.

samples/tutorial/bmain.idr → samples/tutorial/BMain.idrrenamed+2−2

This diff is too big to show here.

samples/tutorial/btree.idr → samples/tutorial/BTree.idrrenamed+4

This diff is too big to show here.

samples/tutorial/btreemod.idr → samples/tutorial/BTreeMod.idrrenamed+5−5

This diff is too big to show here.

samples/tutorial/foo.idr → samples/tutorial/Foo.idrrenamed

The content is the same.

samples/tutorial/hello.idr → samples/tutorial/Hello.idrrenamed

The content is the same.

samples/tutorial/idiom.idr → samples/tutorial/Idiom.idrrenamed+2−2

This diff is too big to show here.

samples/tutorial/classes.idr → samples/tutorial/Interfaces.idrrenamed+1−1

This diff is too big to show here.

samples/tutorial/interp.idr → samples/tutorial/Interp.idrrenamed+5−2

This diff is too big to show here.

samples/tutorial/letbind.idr → samples/tutorial/LetBind.idrrenamed+1−1

This diff is too big to show here.

samples/tutorial/prims.idr → samples/tutorial/Prims.idrrenamed+1−1

This diff is too big to show here.

samples/tutorial/Record.idrnew file+21

This diff is too big to show here.

samples/tutorial/theorems.idr → samples/tutorial/Theorems.idrrenamed−20

This diff is too big to show here.

samples/tutorial/universe.idr → samples/tutorial/Universe.idrrenamed

The content is the same.

samples/tutorial/usefultypes.idr → samples/tutorial/UsefulTypes.idrrenamed+1

This diff is too big to show here.

samples/tutorial/vbroken.idr → samples/tutorial/VBroken.idrrenamed

The content is the same.

samples/tutorial/views.idr → samples/tutorial/Views.idrrenamed+8−20

This diff is too big to show here.

samples/tutorial/viewsbroken.idr → samples/tutorial/ViewsBroken.idrrenamed

The content is the same.

samples/tutorial/wheres.idr → samples/tutorial/Wheres.idrrenamed+1−1

This diff is too big to show here.

samples/tutorial/binary.idrdeleted−61

This diff is too big to show here.

scripts/generate-multi-ghc-travis-templatenew file+20

This diff is too big to show here.

scripts/runidrisnew file+25

This diff is too big to show here.

scripts/runidris-nodenew file+25

This diff is too big to show here.

src/IRTS/BCImp.hsdeleted−19

This diff is too big to show here.

src/IRTS/Bytecode.hs+39−36

This diff is too big to show here.

src/IRTS/CodegenC.hs+416−175

This diff is too big to show here.

src/IRTS/CodegenCommon.hs+35−30

This diff is too big to show here.

src/IRTS/CodegenJavaScript.hs+64−1358

This diff is too big to show here.

src/IRTS/Compiler.hs+340−247

This diff is too big to show here.

src/IRTS/Defunctionalise.hs+83−99

This diff is too big to show here.

src/IRTS/DumpBC.hs+10−3

This diff is too big to show here.

src/IRTS/Exports.hs+16−12

This diff is too big to show here.

src/IRTS/Inliner.hs+7−2

This diff is too big to show here.

src/IRTS/JavaScript/AST.hs+282−394

This diff is too big to show here.

src/IRTS/JavaScript/Codegen.hsnew file+636

This diff is too big to show here.

src/IRTS/JavaScript/LangTransforms.hsnew file+99

This diff is too big to show here.

src/IRTS/JavaScript/Name.hsnew file+57

This diff is too big to show here.

src/IRTS/JavaScript/PrimOp.hsnew file+246

This diff is too big to show here.

src/IRTS/JavaScript/Specialize.hsnew file+109

This diff is too big to show here.

src/IRTS/Lang.hs+195−72

This diff is too big to show here.

src/IRTS/LangOpts.hs+308−60

This diff is too big to show here.

src/IRTS/Portable.hsnew file+363

This diff is too big to show here.

src/IRTS/Simplified.hs+59−65

This diff is too big to show here.

src/IRTS/System.hs+84−47

This diff is too big to show here.

src/Idris/ASTUtils.hs+72−65

This diff is too big to show here.

src/Idris/AbsSyntax.hs+958−552

This diff is too big to show here.

src/Idris/AbsSyntaxTree.hs+1510−1211

This diff is too big to show here.

src/Idris/Apropos.hs+16−14

This diff is too big to show here.

src/Idris/CaseSplit.hs+219−162

This diff is too big to show here.

src/Idris/Chaser.hs+192−100

This diff is too big to show here.

src/Idris/CmdOptions.hs+215−97

This diff is too big to show here.

src/Idris/Colours.hs+42−18

This diff is too big to show here.

src/Idris/Completion.hs+95−68

This diff is too big to show here.

src/Idris/Core/Binary.hs+65−347

This diff is too big to show here.

src/Idris/Core/CaseTree.hs+216−138

This diff is too big to show here.

src/Idris/Core/Constraints.hs+64−32

This diff is too big to show here.

src/Idris/Core/DeepSeq.hs+56−237

This diff is too big to show here.

src/Idris/Core/Elaborate.hs+270−174

This diff is too big to show here.

src/Idris/Core/Evaluate.hs+397−226

This diff is too big to show here.

src/Idris/Core/Execute.hs+172−89

This diff is too big to show here.

src/Idris/Core/ProofState.hs+250−272

This diff is too big to show here.

src/Idris/Core/ProofTerm.hs+72−70

This diff is too big to show here.

src/Idris/Core/TT.hs+446−351

This diff is too big to show here.

src/Idris/Core/Typecheck.hs+195−168

This diff is too big to show here.

src/Idris/Core/Unify.hs+238−266

This diff is too big to show here.

src/Idris/Core/WHNF.hsnew file+256

This diff is too big to show here.

src/Idris/Coverage.hs+427−729

This diff is too big to show here.

src/Idris/DSL.hs+77−65

This diff is too big to show here.

src/Idris/DataOpts.hs+12−14

This diff is too big to show here.

src/Idris/DeepSeq.hs+89−379

This diff is too big to show here.

src/Idris/Delaborate.hs+242−154

This diff is too big to show here.

src/Idris/Directives.hs+106−41

This diff is too big to show here.

src/Idris/Docs.hs+220−132

This diff is too big to show here.

src/Idris/Docstrings.hs+29−21

This diff is too big to show here.

src/Idris/Elab/AsPat.hs+38−13

This diff is too big to show here.

src/Idris/Elab/Class.hsdeleted−322

This diff is too big to show here.

src/Idris/Elab/Clause.hs+615−367

This diff is too big to show here.

src/Idris/Elab/Data.hs+158−394

This diff is too big to show here.

src/Idris/Elab/Implementation.hsnew file+489

This diff is too big to show here.

src/Idris/Elab/Instance.hsdeleted−332

This diff is too big to show here.

src/Idris/Elab/Interface.hsnew file+449

This diff is too big to show here.

src/Idris/Elab/Provider.hs+21−44

This diff is too big to show here.

src/Idris/ElabQuasiquote.hs → src/Idris/Elab/Quasiquote.hsrenamed+27−20

This diff is too big to show here.

src/Idris/Elab/Record.hs+149−159

This diff is too big to show here.

src/Idris/Elab/Rewrite.hsnew file+259

This diff is too big to show here.

src/Idris/Elab/RunElab.hsnew file+53

This diff is too big to show here.

src/Idris/Elab/Term.hs+1252−923

This diff is too big to show here.

src/Idris/Elab/Transform.hs+37−60

This diff is too big to show here.

src/Idris/Elab/Type.hs+99−101

This diff is too big to show here.

src/Idris/Elab/Utils.hs+608−67

This diff is too big to show here.

src/Idris/Elab/Value.hs+39−55

This diff is too big to show here.

src/Idris/ElabDecls.hs+135−97

This diff is too big to show here.

src/Idris/Erasure.hs+198−80

This diff is too big to show here.

src/Idris/ErrReverse.hs+22−21

This diff is too big to show here.

src/Idris/Error.hs+40−29

This diff is too big to show here.

src/Idris/Help.hs+26−16

This diff is too big to show here.

src/Idris/IBC.hs+806−1898

This diff is too big to show here.

src/Idris/IdeMode.hs+55−42

This diff is too big to show here.

src/Idris/IdrisDoc.hs+104−89

This diff is too big to show here.

src/Idris/Imports.hs+66−22

This diff is too big to show here.

src/Idris/Info.hsnew file+94

This diff is too big to show here.

src/Idris/Info/Show.hsnew file+143

This diff is too big to show here.

src/Idris/Inliner.hs+11−6

This diff is too big to show here.

src/Idris/Interactive.hs+267−117

This diff is too big to show here.

src/Idris/Main.hsnew file+309

This diff is too big to show here.

src/Idris/ModeCommon.hsnew file+187

This diff is too big to show here.

src/Idris/Options.hsnew file+291

This diff is too big to show here.

src/Idris/Output.hs+218−44

This diff is too big to show here.

src/Idris/Package.hsnew file+524

This diff is too big to show here.

src/Idris/Package/Common.hsnew file+41

This diff is too big to show here.

src/Idris/Package/Parser.hsnew file+148

This diff is too big to show here.

src/Idris/ParseExpr.hsdeleted−1469

This diff is too big to show here.

src/Idris/ParseHelpers.hsdeleted−650

This diff is too big to show here.

src/Idris/ParseOps.hsdeleted−173

This diff is too big to show here.

src/Idris/Parser.hs+1030−760

This diff is too big to show here.

src/Idris/ParseData.hs → src/Idris/Parser/Data.hsrenamed+115−137

This diff is too big to show here.

src/Idris/Parser/Expr.hsnew file+1580

This diff is too big to show here.

src/Idris/Parser/Helpers.hsnew file+559

This diff is too big to show here.

src/Idris/Parser/Ops.hsnew file+249

This diff is too big to show here.

src/Idris/Parser/Stack.hsnew file+161

This diff is too big to show here.

src/Idris/PartialEval.hs+164−107

This diff is too big to show here.

src/Idris/Primitives.hs+42−60

This diff is too big to show here.

src/Idris/ProofSearch.hs+342−79

This diff is too big to show here.

src/Idris/Prover.hs+157−127

This diff is too big to show here.

src/Idris/Providers.hs+17−9

This diff is too big to show here.

src/Idris/REPL.hs+431−775

This diff is too big to show here.

src/Idris/REPL/Browse.hs+15−7

This diff is too big to show here.

src/Idris/REPL/Commands.hsnew file+81

This diff is too big to show here.

src/Idris/REPL/Parser.hsnew file+540

This diff is too big to show here.

src/Idris/REPLParser.hsdeleted−485

This diff is too big to show here.

src/Idris/Reflection.hs+321−205

This diff is too big to show here.

src/Idris/Termination.hsnew file+639

This diff is too big to show here.

src/Idris/Transforms.hs+30−25

This diff is too big to show here.

src/Idris/TypeSearch.hs+155−131

This diff is too big to show here.

src/Idris/Unlit.hs+12−3

This diff is too big to show here.

src/Idris/WhoCalls.hs+10−5

This diff is too big to show here.

src/Pkg/PParser.hsdeleted−106

This diff is too big to show here.

src/Pkg/Package.hsdeleted−298

This diff is too big to show here.

src/Util/DynamicLinker.hs+103−28

This diff is too big to show here.

src/Util/Net.hs+21−15

This diff is too big to show here.

src/Util/Pretty.hs+15−6

This diff is too big to show here.

src/Util/ScreenSize.hs+9−17

This diff is too big to show here.

src/Util/System.hs+93−29

This diff is too big to show here.

stack-11.22.yamlnew file+21

This diff is too big to show here.

stack-12.26.yamlnew file+20

This diff is too big to show here.

stack-15.3.yamlnew file+17

This diff is too big to show here.

stack-15.4.yamlnew file+17

This diff is too big to show here.

stack-shell.nixnew file+24

This diff is too big to show here.

stack.yamlnew file+1

This diff is too big to show here.

stylize.shnew file+40

This diff is too big to show here.

test/Makefiledeleted−21

This diff is too big to show here.

test/READMEdeleted−19

This diff is too big to show here.

test/README.mdnew file+160

This diff is too big to show here.

test/TestData.hsnew file+350

This diff is too big to show here.

test/TestRun.hsnew file+128

This diff is too big to show here.

test/base001/Makefilenew file+11

This diff is too big to show here.

test/base001/base001.idrnew file+35

This diff is too big to show here.

test/base001/base001.ipkgnew file+5

This diff is too big to show here.

test/base001/exit1.cnew file+21

This diff is too big to show here.

test/base001/expected.outnew file+25

This diff is too big to show here.

test/base001/run.shnew file+12

This diff is too big to show here.

test/base001/sys.cnew file+15

This diff is too big to show here.

test/base001/sys.hnew file+7

This diff is too big to show here.

test/basic001/expected → test/basic001/expected.outrenamed

The content is the same.

test/basic001/rundeleted−6

This diff is too big to show here.

test/basic001/run.shnew file+6

This diff is too big to show here.

test/basic002/expecteddeleted−1

This diff is too big to show here.

test/basic002/expected.outnew file+13

This diff is too big to show here.

test/basic002/run → test/basic002/run.shrenamed+1−1

This diff is too big to show here.

test/basic002/test006.idr+9−9

This diff is too big to show here.

test/basic003/expected → test/basic003/expected.outrenamed

The content is the same.

test/basic003/run → test/basic003/run.shrenamed+1−1

This diff is too big to show here.

test/basic004/expected → test/basic004/expected.outrenamed

The content is the same.

test/basic004/run → test/basic004/run.shrenamed+1−1

This diff is too big to show here.

test/basic005/expected → test/basic005/expected.outrenamed

The content is the same.

test/basic005/run → test/basic005/run.shrenamed+1−1

This diff is too big to show here.

test/basic006/expected → test/basic006/expected.outrenamed+8−1

This diff is too big to show here.

test/basic006/rundeleted−6

This diff is too big to show here.

test/basic006/run.shnew file+6

This diff is too big to show here.

test/basic007/expected → test/basic007/expected.outrenamed

The content is the same.

test/basic007/run → test/basic007/run.shrenamed+1−1

This diff is too big to show here.

test/basic008/expected → test/basic008/expected.outrenamed

The content is the same.

test/basic008/run → test/basic008/run.shrenamed+1−1

This diff is too big to show here.

test/basic008/test036.idr+2−2

This diff is too big to show here.

test/basic009/A.idr+1

This diff is too big to show here.

test/basic009/B/C.idr+1

This diff is too big to show here.

test/basic009/expecteddeleted−4

This diff is too big to show here.

test/basic009/expected.outnew file+32

This diff is too big to show here.

test/basic009/rundeleted−8

This diff is too big to show here.

test/basic009/run.shnew file+8

This diff is too big to show here.

test/basic010/Main.idr+13−13

This diff is too big to show here.

test/basic010/expected → test/basic010/expected.outrenamed+1−1

This diff is too big to show here.

test/basic010/rundeleted−41

This diff is too big to show here.

test/basic010/run.shnew file+10

This diff is too big to show here.

test/basic011/basic011.idr+4

This diff is too big to show here.

test/basic011/expected → test/basic011/expected.outrenamed+4

This diff is too big to show here.

test/basic011/rundeleted−4

This diff is too big to show here.

test/basic011/run.shnew file+4

This diff is too big to show here.

test/basic012/basic012a.idrnew file+10

This diff is too big to show here.

test/basic012/expected → test/basic012/expected.outrenamed

The content is the same.

test/basic012/rundeleted−4

This diff is too big to show here.

test/basic012/run.shnew file+5

This diff is too big to show here.

test/basic013/basic013.idr+45−1

This diff is too big to show here.

test/basic013/expecteddeleted−14

This diff is too big to show here.

test/basic013/expected.outnew file+59

This diff is too big to show here.

test/basic013/run → test/basic013/run.shrenamed+1−1

This diff is too big to show here.

test/basic014/basic014.idrnew file+44

This diff is too big to show here.

test/disambig002/expected → test/basic014/expected.outrenamed

The content is the same.

test/basic014/run.shnew file+3

This diff is too big to show here.

test/basic015/basic015.idrnew file+73

This diff is too big to show here.

test/basic015/expected.outnew file+3

This diff is too big to show here.

test/basic015/run.shnew file+4

This diff is too big to show here.

test/basic016/CycleA.idrnew file+4

This diff is too big to show here.

test/basic016/CycleB.idrnew file+5

This diff is too big to show here.

test/basic016/CycleC.idrnew file+4

This diff is too big to show here.

test/basic016/expected.outnew file+1

This diff is too big to show here.

test/basic016/run.shnew file+3

This diff is too big to show here.

test/basic017/basic017.idrnew file+25

This diff is too big to show here.

test/basic017/basic017a.idrnew file+15

This diff is too big to show here.

test/basic017/expected.outnew file+8

This diff is too big to show here.

test/basic017/run.shnew file+4

This diff is too big to show here.

test/basic018/basic018.idrnew file+14

This diff is too big to show here.

test/basic018/expected.outnew file+32

This diff is too big to show here.

test/basic018/run.shnew file+3

This diff is too big to show here.

test/basic019/basic019.idrnew file+10

This diff is too big to show here.

test/basic019/expected.outnew file+12

This diff is too big to show here.

test/basic019/run.shnew file+4

This diff is too big to show here.

test/basic020/basic020.idrnew file+42

This diff is too big to show here.

test/bignum001/expected → test/basic020/expected.outrenamed

The content is the same.

test/basic020/run.shnew file+4

This diff is too big to show here.

test/basic021/basic021.idrnew file+13

This diff is too big to show here.

test/basic021/basic021_2.idrnew file+13

This diff is too big to show here.

test/basic021/expected.outnew file+2

This diff is too big to show here.

test/basic021/run.shnew file+6

This diff is too big to show here.

test/basic022/basic022.idrnew file+13

This diff is too big to show here.

test/basic022/expected.outnew file+1

This diff is too big to show here.

test/basic022/run.shnew file+4

This diff is too big to show here.

test/basic023/expected.outnew file+10

This diff is too big to show here.

test/basic023/run.shnew file+4

This diff is too big to show here.

test/basic023/sections.idrnew file+34

This diff is too big to show here.

test/basic024/basic024.idrnew file+51

This diff is too big to show here.

test/basic024/expected.outnew file+76

This diff is too big to show here.

test/basic024/input.innew file+46

This diff is too big to show here.

test/basic024/run.shnew file+8

This diff is too big to show here.

test/basic025/basic025.idrnew file+28

This diff is too big to show here.

test/basic025/expected.outnew file+12

This diff is too big to show here.

test/basic025/input.innew file+7

This diff is too big to show here.

test/basic025/run.shnew file+7

This diff is too big to show here.

test/basic026/basic026.idrnew file+12

This diff is too big to show here.

test/basic026/expected.outnew file+2

This diff is too big to show here.

test/basic026/run.shnew file+4

This diff is too big to show here.

test/bignum001/expected.outnew file+1

This diff is too big to show here.

test/bignum001/run → test/bignum001/run.shrenamed+1−1

This diff is too big to show here.

test/bignum002/bignum002.idr+10−1

This diff is too big to show here.

test/bignum002/expecteddeleted−1

This diff is too big to show here.

test/bignum002/expected.outnew file+8

This diff is too big to show here.

test/bignum002/run → test/bignum002/run.shrenamed+1−1

This diff is too big to show here.

test/bignum003/bignum003.idrnew file+23

This diff is too big to show here.

test/bignum003/expected.outnew file+2

This diff is too big to show here.

test/bignum003/run.shnew file+4

This diff is too big to show here.

test/bounded001/expected → test/bounded001/expected.outrenamed

The content is the same.

test/bounded001/run → test/bounded001/run.shrenamed+1−1

This diff is too big to show here.

test/buffer001/buffer001.idrnew file+33

This diff is too big to show here.

test/buffer001/expected.outnew file+7

This diff is too big to show here.

test/buffer001/run.shnew file+4

This diff is too big to show here.

test/buffer002/buffer002.idrnew file+34

This diff is too big to show here.

test/buffer002/expected.outnew file+11

This diff is too big to show here.

test/buffer002/run.shnew file+4

This diff is too big to show here.

test/classes001/rundeleted−3

This diff is too big to show here.

test/contrib001/contrib001.idrnew file+14

This diff is too big to show here.

test/contrib001/expected.outnew file+12

This diff is too big to show here.

test/contrib001/run.shnew file+4

This diff is too big to show here.

test/corecords001/corecords001.idr+1−1

This diff is too big to show here.

test/corecords001/expected → test/corecords001/expected.outrenamed

The content is the same.

test/corecords001/run → test/corecords001/run.shrenamed+1−1

This diff is too big to show here.

test/corecords002/expected → test/corecords002/expected.outrenamed

The content is the same.

test/corecords002/run → test/corecords002/run.shrenamed+1−1

This diff is too big to show here.

test/delab001/expected → test/delab001/expected.outrenamed+2−2

This diff is too big to show here.

test/delab001/input → test/delab001/input.inrenamed

The content is the same.

test/delab001/rundeleted−3

This diff is too big to show here.

test/delab001/run.shnew file+3

This diff is too big to show here.

test/directives001/directives001.idrnew file+28

This diff is too big to show here.

test/directives001/expected.outnew file+42

This diff is too big to show here.

test/directives001/run.shnew file+4

This diff is too big to show here.

test/directives002/directives002.idrnew file+14

This diff is too big to show here.

test/directives002/expected.outnew file+6

This diff is too big to show here.

test/directives002/run.shnew file+4

This diff is too big to show here.

test/directives003/directives003.idrnew file+11

This diff is too big to show here.

test/directives003/expected.outnew file+6

This diff is too big to show here.

test/directives003/run.shnew file+13

This diff is too big to show here.

test/disambig001/disambig001.idrdeleted−12

This diff is too big to show here.

test/disambig001/expecteddeleted−1

This diff is too big to show here.

test/disambig001/rundeleted−4

This diff is too big to show here.

test/disambig002/disambig002.idr+13−18

This diff is too big to show here.

test/error002/expected → test/disambig002/expected.outrenamed

The content is the same.

test/disambig002/rundeleted−3

This diff is too big to show here.

test/disambig002/run.shnew file+3

This diff is too big to show here.

test/docs001/docs001.idr+7−7

This diff is too big to show here.

test/docs001/expecteddeleted−17

This diff is too big to show here.

test/docs001/expected.outnew file+17

This diff is too big to show here.

test/docs001/input → test/docs001/input.inrenamed

The content is the same.

test/docs001/rundeleted−3

This diff is too big to show here.

test/docs001/run.shnew file+3

This diff is too big to show here.

test/docs002/docs002.idr+2−2

This diff is too big to show here.

test/docs002/expecteddeleted−12

This diff is too big to show here.

test/docs002/expected.outnew file+12

This diff is too big to show here.

test/docs002/input → test/docs002/input.inrenamed

The content is the same.

test/docs002/rundeleted−3

This diff is too big to show here.

test/docs002/run.shnew file+3

This diff is too big to show here.

test/docs003/docs003.idr+2−2

This diff is too big to show here.

test/docs003/expecteddeleted−37

This diff is too big to show here.

test/docs003/expected.outnew file+41

This diff is too big to show here.

test/docs003/input → test/docs003/input.inrenamed

The content is the same.

test/docs003/rundeleted−3

This diff is too big to show here.

test/docs003/run.shnew file+3

This diff is too big to show here.

test/docs004/expected → test/docs004/expected.outrenamed+3−3

This diff is too big to show here.

test/docs004/input → test/docs004/input.inrenamed

The content is the same.

test/docs004/rundeleted−3

This diff is too big to show here.

test/docs004/run.shnew file+3

This diff is too big to show here.

test/docs005/docs005.idrnew file+19

This diff is too big to show here.

test/docs005/expected.outnew file+31

This diff is too big to show here.

test/docs005/input.innew file+2

This diff is too big to show here.

test/docs005/run.shnew file+3

This diff is too big to show here.

test/docs006/docs006.idrnew file+7

This diff is too big to show here.

test/docs006/expected.outnew file+16

This diff is too big to show here.

test/docs006/input.innew file+1

This diff is too big to show here.

test/docs006/run.shnew file+3

This diff is too big to show here.

test/dsl001/expecteddeleted−2

This diff is too big to show here.

test/dsl001/expected.outnew file+14

This diff is too big to show here.

test/dsl001/input.innew file+2

This diff is too big to show here.

test/dsl001/rundeleted−4

This diff is too big to show here.

test/dsl001/run.shnew file+5

This diff is too big to show here.

test/dsl001/test001.idr+14−12

This diff is too big to show here.

test/dsl002/Resimp.idr+26−23

This diff is too big to show here.

test/dsl002/expected → test/dsl002/expected.outrenamed

The content is the same.

test/dsl002/run → test/dsl002/run.shrenamed+1−1

This diff is too big to show here.

test/dsl002/test → test/dsl002/test.inrenamed

The content is the same.

test/dsl002/test014.idr+8−7

This diff is too big to show here.

test/dsl003/DSLPi.idr+3−1

This diff is too big to show here.

test/dsl003/expected → test/dsl003/expected.outrenamed+1−1

This diff is too big to show here.

test/dsl003/rundeleted−3

This diff is too big to show here.

test/dsl003/run.shnew file+3

This diff is too big to show here.

test/dsl004/Door0.idrnew file+35

This diff is too big to show here.

test/dsl004/Door1.idrnew file+39

This diff is too big to show here.

test/dsl004/Door2.idrnew file+39

This diff is too big to show here.

test/dsl004/Door3.idrnew file+32

This diff is too big to show here.

test/dsl004/IOu.idrnew file+21

This diff is too big to show here.

test/ffi004/expected → test/dsl004/expected.outrenamed

The content is the same.

test/dsl004/run.shnew file+5

This diff is too big to show here.

test/effects001/expected → test/effects001/expected.outrenamed+2−2

This diff is too big to show here.

test/effects001/rundeleted−6

This diff is too big to show here.

test/effects001/run.shnew file+6

This diff is too big to show here.

test/effects001/test021.idr+35−20

This diff is too big to show here.

test/effects001/test021a.idr+3−3

This diff is too big to show here.

test/effects001/testFile → test/effects001/testFile.inrenamed

The content is the same.

test/effects002/expected → test/effects002/expected.outrenamed

The content is the same.

test/effects002/rundeleted−4

This diff is too big to show here.

test/effects002/run.shnew file+4

This diff is too big to show here.

test/effects002/test025.idr+1−1

This diff is too big to show here.

test/effects003/VectMissing.idr+1−3

This diff is too big to show here.

test/effects003/expecteddeleted−41

This diff is too big to show here.

test/effects003/expected.outnew file+31

This diff is too big to show here.

test/effects003/foo−9236

This diff is too big to show here.

test/effects003/hangman.idr+8−4

This diff is too big to show here.

test/effects003/input−10

This diff is too big to show here.

test/effects003/input.in+6

This diff is too big to show here.

test/effects003/run−4

This diff is too big to show here.

test/effects003/run.sh+4

This diff is too big to show here.

test/effects004/expected.out

This diff is too big to show here.

test/effects004/input.in

This diff is too big to show here.

test/effects004/run−4

This diff is too big to show here.

test/effects004/run.sh+4

This diff is too big to show here.

test/effects005/categoryLogger.idr+23

This diff is too big to show here.

test/effects005/defaultLogger.idr+14

This diff is too big to show here.

test/effects005/expected.out+5

This diff is too big to show here.

test/effects005/run.sh+6

This diff is too big to show here.

test/error001/expected−8

This diff is too big to show here.

test/error001/expected.out+13

This diff is too big to show here.

test/error001/run−3

This diff is too big to show here.

test/error001/run.sh+3

This diff is too big to show here.

test/error002/expected.out

This diff is too big to show here.

test/error002/run.sh+1−1

This diff is too big to show here.

test/error002/test031.idr+1−1

This diff is too big to show here.

test/error003/ErrorReflection.idr+3−3

This diff is too big to show here.

test/error003/expected−2

This diff is too big to show here.

test/error003/expected.out+9

This diff is too big to show here.

test/error003/run−3

This diff is too big to show here.

test/error003/run.sh+3

This diff is too big to show here.

test/error004/FunErrTest.idr+4−4

This diff is too big to show here.

test/error004/expected−6

This diff is too big to show here.

test/error004/expected.out+20

This diff is too big to show here.

test/error004/run−3

This diff is too big to show here.

test/error004/run.sh+3

This diff is too big to show here.

test/error005/expected.out+40−5

This diff is too big to show here.

test/error005/run−3

This diff is too big to show here.

test/error005/run.sh+3

This diff is too big to show here.

test/error006/WithPatsNoWith.idr+17

This diff is too big to show here.

test/error006/expected.out+21

This diff is too big to show here.

test/error006/run.sh+3

This diff is too big to show here.

test/error007/error007.idr+29

This diff is too big to show here.

test/error007/expected.out+19

This diff is too big to show here.

test/error007/run.sh+3

This diff is too big to show here.

test/error008/error008.idr+5

This diff is too big to show here.

test/error008/error008a.idr+5

This diff is too big to show here.

test/error008/expected.out+14

This diff is too big to show here.

test/error008/run.sh+4

This diff is too big to show here.

test/error009/expected.out+1

This diff is too big to show here.

test/error009/run.sh+2

This diff is too big to show here.

test/ffi001/expected.out

This diff is too big to show here.

test/ffi001/run−3

This diff is too big to show here.

test/ffi001/run.sh+3

This diff is too big to show here.

test/ffi001/test022.idr+2−2

This diff is too big to show here.

test/ffi002/expected−1

This diff is too big to show here.

test/ffi002/expected.out+6

This diff is too big to show here.

test/ffi002/run−3

This diff is too big to show here.

test/ffi002/run.sh+3

This diff is too big to show here.

test/ffi002/test023.idr+2−2

This diff is too big to show here.

test/ffi003/expected.out

This diff is too big to show here.

test/ffi003/input.in

This diff is too big to show here.

test/ffi003/run−3

This diff is too big to show here.

test/ffi003/run.sh+3

This diff is too big to show here.

test/ffi004/expected.out

This diff is too big to show here.

test/ffi004/run−3

This diff is too big to show here.

test/ffi004/run.sh+3

This diff is too big to show here.

test/ffi004/test026.idr+3−2

This diff is too big to show here.

test/ffi004/theOtherType+1−1

This diff is too big to show here.

test/ffi005/Postulate.idr+1−1

This diff is too big to show here.

test/ffi005/expected.out

This diff is too big to show here.

test/ffi005/run.sh+1−1

This diff is too big to show here.

test/ffi006/expected.out

This diff is too big to show here.

test/ffi006/ffi006.idr+1−1

This diff is too big to show here.

test/ffi006/run−5

This diff is too big to show here.

test/ffi006/run.sh+5

This diff is too big to show here.

test/ffi007/expected.out+10

This diff is too big to show here.

test/ffi007/ffi007.c+34

This diff is too big to show here.

test/ffi007/ffi007.h+15

This diff is too big to show here.

test/ffi007/ffi007.idr+63

This diff is too big to show here.

test/ffi007/run.sh+4

This diff is too big to show here.

test/ffi008/expected.out+5

This diff is too big to show here.

test/ffi008/ffi008.c+25

This diff is too big to show here.

test/ffi008/ffi008.h+19

This diff is too big to show here.

test/ffi008/ffi008.idr+58

This diff is too big to show here.

test/ffi008/run.sh+4

This diff is too big to show here.

test/ffi009/Bad.idr+36

This diff is too big to show here.

test/ffi009/Good.idr+37

This diff is too big to show here.

test/ffi009/expected.out+1

This diff is too big to show here.

test/ffi009/ffi009.c+44

This diff is too big to show here.

test/ffi009/ffi009.h+20

This diff is too big to show here.

test/ffi009/run.sh+5

This diff is too big to show here.

test/ffi010/expected.out+3

This diff is too big to show here.

test/ffi010/ffi010.idr+43

This diff is too big to show here.

test/ffi010/run.sh+4

This diff is too big to show here.

test/ffi011/expected.out+2

This diff is too big to show here.

test/ffi011/ffi011.idr+27

This diff is too big to show here.

test/ffi011/ffi011.js+7

This diff is too big to show here.

test/ffi011/run.sh+4

This diff is too big to show here.

test/ffi012/expected.out+1

This diff is too big to show here.

test/ffi012/ffi012.idr+14

This diff is too big to show here.

test/ffi012/ffi012.js+3

This diff is too big to show here.

test/ffi012/run.sh+4

This diff is too big to show here.

test/ffi013/expected.out+4

This diff is too big to show here.

test/ffi013/ffi013.idr+5

This diff is too big to show here.

test/ffi013/run.sh+17

This diff is too big to show here.

test/folding001/expected.out

This diff is too big to show here.

test/folding001/run.sh+1−1

This diff is too big to show here.

test/idrisdoc001/expected.out

This diff is too big to show here.

test/idrisdoc001/run.sh+1−1

This diff is too big to show here.

test/idrisdoc002/TestFunctions.idr+2−1

This diff is too big to show here.

test/idrisdoc002/expected.out

This diff is too big to show here.

test/idrisdoc002/run.sh+2−2

This diff is too big to show here.

test/idrisdoc003/TestDatatypes.idr+2−1

This diff is too big to show here.

test/idrisdoc003/expected.out

This diff is too big to show here.

test/idrisdoc003/run.sh+2−2

This diff is too big to show here.

test/idrisdoc004/TestInterfaces.idr+9

This diff is too big to show here.

test/idrisdoc004/TestTypeclasses.idr−8

This diff is too big to show here.

test/idrisdoc004/expected−1

This diff is too big to show here.

test/idrisdoc004/expected.out+1

This diff is too big to show here.

test/idrisdoc004/run−5

This diff is too big to show here.

test/idrisdoc004/run.sh+5

This diff is too big to show here.

test/idrisdoc004/test_interfaces.ipkg+6

This diff is too big to show here.

test/idrisdoc004/test_typeclasses.ipkg−6

This diff is too big to show here.

test/idrisdoc005/TestTracing.idr+2−1

This diff is too big to show here.

test/idrisdoc005/expected.out

This diff is too big to show here.

test/idrisdoc005/run.sh+2−2

This diff is too big to show here.

test/idrisdoc006/A/fully/Qualified/NAME.idr+2−2

This diff is too big to show here.

test/idrisdoc006/B.idr+2−1

This diff is too big to show here.

test/idrisdoc006/expected.out

This diff is too big to show here.

test/idrisdoc006/run.sh+3−3

This diff is too big to show here.

test/idrisdoc007/expected.out

This diff is too big to show here.

test/idrisdoc007/run.sh+2−2

This diff is too big to show here.

test/idrisdoc008/Abstract.idr+2−2

This diff is too big to show here.

test/idrisdoc008/Visible.idr+2−2

This diff is too big to show here.

test/idrisdoc008/expected.out

This diff is too big to show here.

test/idrisdoc008/run.sh+2−2

This diff is too big to show here.

test/idrisdoc009/Test.idr+2

This diff is too big to show here.

test/idrisdoc009/expected.out+2

This diff is too big to show here.

test/idrisdoc009/input.in

This diff is too big to show here.

test/idrisdoc009/run−3

This diff is too big to show here.

test/idrisdoc009/run.sh+3

This diff is too big to show here.

test/interactive001/expected−13

This diff is too big to show here.

test/interactive001/expected.out+20

This diff is too big to show here.

test/interactive001/input−6

This diff is too big to show here.

test/interactive001/input.in+8

This diff is too big to show here.

test/interactive001/interactive001.idr+9

This diff is too big to show here.

test/interactive001/run−3

This diff is too big to show here.

test/interactive001/run.sh+5

This diff is too big to show here.

test/interactive002/expected.out+1−1

This diff is too big to show here.

test/interactive002/input.in

This diff is too big to show here.

test/interactive002/run−3

This diff is too big to show here.

test/interactive002/run.sh+3

This diff is too big to show here.

test/interactive003/expected.out+1

This diff is too big to show here.

test/interactive003/input.in+1

This diff is too big to show here.

test/interactive003/interactive003.idr+5

This diff is too big to show here.

test/interactive003/run−3

This diff is too big to show here.

test/interactive003/run.sh+3

This diff is too big to show here.

test/interactive004/expected−2

This diff is too big to show here.

test/interactive004/expected.out+2

This diff is too big to show here.

test/interactive004/input.in

This diff is too big to show here.

test/interactive004/run−3

This diff is too big to show here.

test/interactive004/run.sh+3

This diff is too big to show here.

test/interactive005/expected.out+4−4

This diff is too big to show here.

test/interactive005/input.in

This diff is too big to show here.

test/interactive005/run−6

This diff is too big to show here.

test/interactive005/run.sh+6

This diff is too big to show here.

test/interactive006/expected.out

This diff is too big to show here.

test/interactive006/input.in

This diff is too big to show here.

test/interactive006/run−3

This diff is too big to show here.

test/interactive006/run.sh+3

This diff is too big to show here.

test/interactive007/expected.msys−1

This diff is too big to show here.

test/interactive007/expected.out

This diff is too big to show here.

test/interactive007/input.in

This diff is too big to show here.

test/interactive007/run−2

This diff is too big to show here.

test/interactive007/run.sh+2

This diff is too big to show here.

test/interactive008/expected.out

This diff is too big to show here.

test/interactive008/input.in

This diff is too big to show here.

test/interactive008/run−2

This diff is too big to show here.

test/interactive008/run.sh+2

This diff is too big to show here.

test/interactive009/expected.out+1

This diff is too big to show here.

test/interactive009/input.in+1

This diff is too big to show here.

test/interactive009/interactive009.idr+27

This diff is too big to show here.

test/interactive009/run.sh+3

This diff is too big to show here.

test/interactive010/expected.out+24

This diff is too big to show here.

test/interactive010/input.in+9

This diff is too big to show here.

test/interactive010/run.sh+2

This diff is too big to show here.

test/interactive011/.gitignore+1

This diff is too big to show here.

test/interactive011/expected.out+3

This diff is too big to show here.

test/interactive011/input.in+2

This diff is too big to show here.

test/interactive011/interactive011.ipkg+8

This diff is too big to show here.

test/interactive011/run.sh+6

This diff is too big to show here.

test/interactive011/src/Foo.idr+5

This diff is too big to show here.

test/interactive011/src/Main.idr+14

This diff is too big to show here.

test/interactive012/expected.out+33

This diff is too big to show here.

test/interactive012/input.in+9

This diff is too big to show here.

test/interactive012/interactive012.idr+26

This diff is too big to show here.

test/interactive012/run.sh+3

This diff is too big to show here.

test/interactive013/expected.out+4

This diff is too big to show here.

test/interactive013/input.in+1

This diff is too big to show here.

test/interactive013/interactive013.idr+4

This diff is too big to show here.

test/interactive013/run.sh+3

This diff is too big to show here.

test/interactive014/expected.out+7

This diff is too big to show here.

test/interactive014/input.in+5

This diff is too big to show here.

test/interactive014/interactive014.idr+10

This diff is too big to show here.

test/interactive014/run.sh+3

This diff is too big to show here.

test/interactive015/expected.out+6

This diff is too big to show here.

test/interactive015/input.in+2

This diff is too big to show here.

test/interactive015/run.sh+8

This diff is too big to show here.

test/interactive015/src/interactive015.idr+4

This diff is too big to show here.

test/interactive016/expected.out+7

This diff is too big to show here.

test/interactive016/input.in+2

This diff is too big to show here.

test/interactive016/run.sh+8

This diff is too big to show here.

test/interactive016/src/interactive016.idr+7

This diff is too big to show here.

test/interactive017/TestMod.idr+5

This diff is too big to show here.

test/interactive017/expected.out+7

This diff is too big to show here.

test/interactive017/run.sh+9

This diff is too big to show here.

test/interactive017/shebang-args.idr+6

This diff is too big to show here.

test/interactive017/shebang-import.idr+6

This diff is too big to show here.

test/interactive017/shebang-node.idr+4

This diff is too big to show here.

test/interactive017/shebang.idr+4

This diff is too big to show here.

test/interactive018/Imported1.idr+10

This diff is too big to show here.

test/interactive018/Imported2.idr+8

This diff is too big to show here.

test/interactive018/Public1.idr+10

This diff is too big to show here.

test/interactive018/Public2.idr+8

This diff is too big to show here.

test/interactive018/Top.idr+11

This diff is too big to show here.

test/interactive018/expected.out+20

This diff is too big to show here.

test/interactive018/input.in+20

This diff is too big to show here.

test/interactive018/run.sh+3

This diff is too big to show here.

test/interfaces001/InterfaceName.idr+8−8

This diff is too big to show here.

test/interfaces001/expected.out+6−5

This diff is too big to show here.

test/interfaces001/input.in

This diff is too big to show here.

test/interfaces001/run.sh+3

This diff is too big to show here.

test/interfaces002/expected.out+1

This diff is too big to show here.

test/interfaces002/interfaces002.idr+38

This diff is too big to show here.

test/interfaces002/run.sh+4

This diff is too big to show here.

test/interfaces003/expected.out+2

This diff is too big to show here.

test/interfaces003/interfaces003.idr+22

This diff is too big to show here.

test/interfaces003/run.sh+4

This diff is too big to show here.

test/interfaces004/expected.out+4

This diff is too big to show here.

test/interfaces004/interfaces004.idr+35

This diff is too big to show here.

test/interfaces004/run.sh+4

This diff is too big to show here.

test/interfaces005/expected.out+7

This diff is too big to show here.

test/interfaces005/interfaces005.idr+53

This diff is too big to show here.

test/interfaces005/interfaces005a.idr+50

This diff is too big to show here.

test/interfaces005/interfaces005b.idr+50

This diff is too big to show here.

test/interfaces005/run.sh+5

This diff is too big to show here.

test/interfaces006/expected.out

This diff is too big to show here.

test/interfaces006/interfaces006.idr+19

This diff is too big to show here.

test/interfaces006/run.sh+3

This diff is too big to show here.

test/interfaces007/expected.out+1

This diff is too big to show here.

test/interfaces007/interfaces007.idr+52

This diff is too big to show here.

test/interfaces007/run.sh+4

This diff is too big to show here.

test/interfaces008/expected.out+6

This diff is too big to show here.

test/interfaces008/interfaces008.idr+20

This diff is too big to show here.

test/interfaces008/run.sh+3

This diff is too big to show here.

test/interfaces009/expected.out

This diff is too big to show here.

test/interfaces009/interfaces009.idr+24

This diff is too big to show here.

test/interfaces009/run.sh+3

This diff is too big to show here.

test/interfaces010/expected.out

This diff is too big to show here.

test/interfaces010/interfaces010.idr+12

This diff is too big to show here.

test/interfaces010/run.sh+3

This diff is too big to show here.

test/interpret001/double-echo.idr+6

This diff is too big to show here.

test/interpret001/expected.out+2

This diff is too big to show here.

test/interpret001/input.in+2

This diff is too big to show here.

test/interpret001/run.sh+3

This diff is too big to show here.

test/interpret002/expected.out+4

This diff is too big to show here.

test/interpret002/file-error.idr+6

This diff is too big to show here.

test/interpret002/input.in+2

This diff is too big to show here.

test/interpret002/readable.txt+1

This diff is too big to show here.

test/interpret002/run.sh+3

This diff is too big to show here.

test/interpret003/expected.out+1

This diff is too big to show here.

test/interpret003/input.in+1

This diff is too big to show here.

test/interpret003/interpret003.idr+4

This diff is too big to show here.

test/interpret003/run.sh+3

This diff is too big to show here.

test/interpret003/test

This diff is too big to show here.

test/io001/expected.out

This diff is too big to show here.

test/io001/run.sh+1−1

This diff is too big to show here.

test/io001/test004.idr+8−8

This diff is too big to show here.

test/io002/expected.out

This diff is too big to show here.

test/io002/run.sh+1−1

This diff is too big to show here.

test/io002/test008.idr+1−1

This diff is too big to show here.

test/io003/expected.out

This diff is too big to show here.

test/io003/run−6

This diff is too big to show here.

test/io003/run.sh+6

This diff is too big to show here.

test/io003/test018.idr+5−4

This diff is too big to show here.

test/io003/test018a.idr+4−4

This diff is too big to show here.

test/layout001/expected.out+82

This diff is too big to show here.

test/layout001/layout001a.idr+5

This diff is too big to show here.

test/layout001/layout001b.idr+5

This diff is too big to show here.

test/layout001/layout001c.idr+3

This diff is too big to show here.

test/layout001/layout001d.idr+3

This diff is too big to show here.

test/layout001/layout001e.idr+6

This diff is too big to show here.

test/layout001/layout001f.idr+6

This diff is too big to show here.

test/layout001/layout001g.idr+6

This diff is too big to show here.

test/layout001/layout001h.idr+6

This diff is too big to show here.

test/layout001/layout001i.idr+6

This diff is too big to show here.

test/layout001/layout001j.idr+6

This diff is too big to show here.

test/layout001/layout001k.idr+6

This diff is too big to show here.

test/layout001/layout001l.idr+6

This diff is too big to show here.

test/layout001/layout001n.idr+33

This diff is too big to show here.

test/layout001/mplus1.idr+17

This diff is too big to show here.

test/layout001/mplus2.idr+17

This diff is too big to show here.

test/layout001/mplus3.idr+17

This diff is too big to show here.

test/layout001/run.sh+22

This diff is too big to show here.

test/literate001/Lit.lidr+2−2

This diff is too big to show here.

test/literate001/expected−7

This diff is too big to show here.

test/literate001/expected.out+12

This diff is too big to show here.

test/literate001/run−5

This diff is too big to show here.

test/literate001/run.sh+5

This diff is too big to show here.

test/meta001/Finite.idr+40−38

This diff is too big to show here.

test/meta001/expected.out

This diff is too big to show here.

test/meta001/run−3

This diff is too big to show here.

test/meta001/run.sh+3

This diff is too big to show here.

test/meta002/AgdaStyleReflection.idr+320

This diff is too big to show here.

test/meta002/DataDef.idr+75

This diff is too big to show here.

test/meta002/Deriving.idr+35

This diff is too big to show here.

test/meta002/Tacs.idr+63−15

This diff is too big to show here.

test/meta002/expected−3

This diff is too big to show here.

test/meta002/expected.out+25

This diff is too big to show here.

test/meta002/run−3

This diff is too big to show here.

test/meta002/run.sh+7

This diff is too big to show here.

test/meta003/BadDef.idr+4−2

This diff is too big to show here.

test/meta003/Catch.idr+17

This diff is too big to show here.

test/meta003/expected−6

This diff is too big to show here.

test/meta003/expected.out+12

This diff is too big to show here.

test/meta003/run−3

This diff is too big to show here.

test/meta003/run.sh+5

This diff is too big to show here.

test/meta004/expected.out+7

This diff is too big to show here.

test/meta004/meta004.idr+50

This diff is too big to show here.

test/meta004/run.sh+3

This diff is too big to show here.

test/mktest.pl+1−1

This diff is too big to show here.

test/pkg001/Main.idr+8

This diff is too big to show here.

test/pkg001/expected.out+23

This diff is too big to show here.

test/pkg001/run.sh+8

This diff is too big to show here.

test/pkg001/test-pkg.ipkg+17

This diff is too big to show here.

test/pkg002/Main.idr+4

This diff is too big to show here.

test/pkg002/expected.out

This diff is too big to show here.

test/pkg002/run.sh+5

This diff is too big to show here.

test/pkg002/test.ipkg+8

This diff is too big to show here.

test/pkg003/Main.idr+4

This diff is too big to show here.

test/pkg003/expected.out

This diff is too big to show here.

test/pkg003/run.sh+6

This diff is too big to show here.

test/pkg003/test.ipkg+7

This diff is too big to show here.

test/pkg004/Main.idr+4

This diff is too big to show here.

test/pkg004/expected.out+6

This diff is too big to show here.

test/pkg004/run.sh+6

This diff is too big to show here.

test/pkg004/test.ipkg+8

This diff is too big to show here.

test/pkg005/expected.out+1

This diff is too big to show here.

test/pkg005/run.sh+3

This diff is too big to show here.

test/pkg005/test.ipkg+3

This diff is too big to show here.

test/pkg006/expected.out+1

This diff is too big to show here.

test/pkg006/run.sh+3

This diff is too big to show here.

test/pkg006/test.ipkg+3

This diff is too big to show here.

test/pkg007/expected.out+1

This diff is too big to show here.

test/pkg007/input.in+4

This diff is too big to show here.

test/pkg007/run.sh+7

This diff is too big to show here.

test/pkg007/toy/Toy.idr+4

This diff is too big to show here.

test/pkg007/toy/Toy/Vehicle.idr+4

This diff is too big to show here.

test/pkg007/toy/Toy/Vehicle/Car.idr+3

This diff is too big to show here.

test/pkg007/toy/toy.ipkg+7

This diff is too big to show here.

test/pkg008/expected.out+13

This diff is too big to show here.

test/pkg008/maths.ipkg+10

This diff is too big to show here.

test/pkg008/run.sh+11

This diff is too big to show here.

test/pkg008/src/NumOps.idr+9

This diff is too big to show here.

test/pkg008/src/Test.idr+21

This diff is too big to show here.

test/pkg009/datatype.ipkg+6

This diff is too big to show here.

test/pkg009/expected.out+9

This diff is too big to show here.

test/pkg009/run.sh+7

This diff is too big to show here.

test/pkg009/src/Data/Type.idr+3

This diff is too big to show here.

test/pkg010/expected.out+29

This diff is too big to show here.

test/pkg010/run.sh+2

This diff is too big to show here.

test/pkg010/wrongopts.ipkg+3

This diff is too big to show here.

test/prelude001/expected.out+10

This diff is too big to show here.

test/prelude001/prelude001.idr+14

This diff is too big to show here.

test/prelude001/run.sh+4

This diff is too big to show here.

test/primitives001/expected−6

This diff is too big to show here.

test/primitives001/expected.out+27

This diff is too big to show here.

test/primitives001/input.in+2

This diff is too big to show here.

test/primitives001/run−4

This diff is too big to show here.

test/primitives001/run.sh+6

This diff is too big to show here.

test/primitives001/substring.idr+58

This diff is too big to show here.

test/primitives001/test005.idr−1

This diff is too big to show here.

test/primitives002/expected.out+13−13

This diff is too big to show here.

test/primitives002/run−52

This diff is too big to show here.

test/primitives002/run.sh+54

This diff is too big to show here.

test/primitives003/expected.out+4

This diff is too big to show here.

test/primitives003/run−5

This diff is too big to show here.

test/primitives003/run.sh+5

This diff is too big to show here.

test/primitives003/test038.idr+14−10

This diff is too big to show here.

test/primitives004-disabled/expected.out

This diff is too big to show here.

test/primitives004-disabled/run−4

This diff is too big to show here.

test/primitives004-disabled/run.sh+4

This diff is too big to show here.

test/primitives005/expected.out+2

This diff is too big to show here.

test/primitives005/primitives005.idr+24

This diff is too big to show here.

test/primitives005/run.sh+5

This diff is too big to show here.

test/primitives006/Data/ByteArray.idr+100

This diff is too big to show here.

test/primitives006/Data/Bytes.idr+286

This diff is too big to show here.

test/primitives006/array.c+62

This diff is too big to show here.

test/primitives006/array.h+18

This diff is too big to show here.

test/primitives006/expected.out+9

This diff is too big to show here.

test/primitives006/load-test.idr+48

This diff is too big to show here.

test/primitives006/run.sh+6

This diff is too big to show here.

test/proof001/expected.out+12

This diff is too big to show here.

test/proof001/run−3

This diff is too big to show here.

test/proof001/run.sh+3

This diff is too big to show here.

test/proof001/test029.idr+4−5

This diff is too big to show here.

test/proof002/Reflect.idr+51−51

This diff is too big to show here.

test/proof002/expected−13

This diff is too big to show here.

test/proof002/expected.out+37

This diff is too big to show here.

test/proof002/run−4

This diff is too big to show here.

test/proof002/run.sh+4

This diff is too big to show here.

test/proof002/test030.idr−1

This diff is too big to show here.

test/proof003/Parity.idr+8−6

This diff is too big to show here.

test/proof003/expected−3

This diff is too big to show here.

test/proof003/expected.out+39

This diff is too big to show here.

test/proof003/run.sh+1−1

This diff is too big to show here.

test/proof003/test015.idr+36−30

This diff is too big to show here.

test/proof004/expected.out

This diff is too big to show here.

test/proof004/run−3

This diff is too big to show here.

test/proof004/run.sh+3

This diff is too big to show here.

test/proof005/DefaultArgSubstitutionSuccess.idr+4−4

This diff is too big to show here.

test/proof005/expected.out

This diff is too big to show here.

test/proof005/run−3

This diff is too big to show here.

test/proof005/run.sh+3

This diff is too big to show here.

test/proof006/DefaultArgSubstitutionSyntax.idr+4−4

This diff is too big to show here.

test/proof006/expected.out

This diff is too big to show here.

test/proof006/run−3

This diff is too big to show here.

test/proof006/run.sh+3

This diff is too big to show here.

test/proof007/expected−4

This diff is too big to show here.

test/proof007/expected.out+10

This diff is too big to show here.

test/proof007/run−3

This diff is too big to show here.

test/proof007/run.sh+3

This diff is too big to show here.

test/proof008/expected.out+6

This diff is too big to show here.

test/proof008/run−3

This diff is too big to show here.

test/proof008/run.sh+3

This diff is too big to show here.

test/proof009/expected.out+6−5

This diff is too big to show here.

test/proof009/input.in

This diff is too big to show here.

test/proof009/run−3

This diff is too big to show here.

test/proof009/run.sh+3

This diff is too big to show here.

test/proof010/expected.out

This diff is too big to show here.

test/proof010/proof010.idr+6−6

This diff is too big to show here.

test/proof010/run.sh+1−1

This diff is too big to show here.

test/proof011/expected.out+28

This diff is too big to show here.

test/proof011/proof011.idr+21

This diff is too big to show here.

test/proof011/proof011a.idr+14

This diff is too big to show here.

test/proof011/run.sh+4

This diff is too big to show here.

test/proofsearch001/expected.out

This diff is too big to show here.

test/proofsearch001/proofsearch001.idr+11

This diff is too big to show here.

test/proofsearch001/run.sh+3

This diff is too big to show here.

test/proofsearch002/Process.idr+444

This diff is too big to show here.

test/proofsearch002/expected.out

This diff is too big to show here.

test/proofsearch002/proofsearch002.idr+48

This diff is too big to show here.

test/proofsearch002/run.sh+3

This diff is too big to show here.

test/proofsearch003/expected.out

This diff is too big to show here.

test/proofsearch003/proofsearch003.idr+34

This diff is too big to show here.

test/proofsearch003/run.sh+3

This diff is too big to show here.

test/pruviloj001/expected.out

This diff is too big to show here.

test/pruviloj001/pruviloj001.idr+84

This diff is too big to show here.

test/pruviloj001/run.sh+3

This diff is too big to show here.

test/quasiquote001/QuasiquoteBasics.idr−3

This diff is too big to show here.

test/quasiquote001/expected−5

This diff is too big to show here.

test/quasiquote001/expected.out+5

This diff is too big to show here.

test/quasiquote001/run.sh+1−1

This diff is too big to show here.

test/quasiquote002/expected.out

This diff is too big to show here.

test/quasiquote002/run.sh+1−1

This diff is too big to show here.

test/quasiquote003/expected−2

This diff is too big to show here.

test/quasiquote003/expected.out+9

This diff is too big to show here.

test/quasiquote003/run−3

This diff is too big to show here.

test/quasiquote003/run.sh+3

This diff is too big to show here.

test/quasiquote004/expected−3

This diff is too big to show here.

test/quasiquote004/expected.out+27

This diff is too big to show here.

test/quasiquote004/run−3

This diff is too big to show here.

test/quasiquote004/run.sh+3

This diff is too big to show here.

test/quasiquote005/expected.out

This diff is too big to show here.

test/quasiquote005/run−3

This diff is too big to show here.

test/quasiquote005/run.sh+3

This diff is too big to show here.

test/quasiquote006/expected−13

This diff is too big to show here.

test/quasiquote006/expected.out+31

This diff is too big to show here.

test/quasiquote006/quasiquote006.idr+2−2

This diff is too big to show here.

test/quasiquote006/run−3

This diff is too big to show here.

test/quasiquote006/run.sh+3

This diff is too big to show here.

test/records001/expected.out

This diff is too big to show here.

test/records001/run.sh+1−1

This diff is too big to show here.

test/records002/expected.out

This diff is too big to show here.

test/records002/record002.idr+1−1

This diff is too big to show here.

test/records002/run.sh+1−1

This diff is too big to show here.

test/records003/expected.out

This diff is too big to show here.

test/records003/run.sh+1−1

This diff is too big to show here.

test/records004/expected.out+3

This diff is too big to show here.

test/records004/records004.idr+13

This diff is too big to show here.

test/records004/run.sh+4

This diff is too big to show here.

test/records005/expected.out+4

This diff is too big to show here.

test/records005/records005.idr+39

This diff is too big to show here.

test/records005/run.sh+4

This diff is too big to show here.

test/reg001/Area.idr+12

This diff is too big to show here.

test/reg001/TestEx.idr+31

This diff is too big to show here.

test/reg001/expected.out+3

This diff is too big to show here.

test/reg001/reg001.idr−8

This diff is too big to show here.

test/reg001/run−4

This diff is too big to show here.

test/reg001/run.sh+4

This diff is too big to show here.

test/reg002/expected.out

This diff is too big to show here.

test/reg002/run.sh+1−1

This diff is too big to show here.

test/reg003/expected−6

This diff is too big to show here.

test/reg003/run−4

This diff is too big to show here.

test/reg004/expected.out

This diff is too big to show here.

test/reg004/run.sh+1−1

This diff is too big to show here.

test/reg005/expected.out+3

This diff is too big to show here.

test/reg005/reg005.idr+6−9

This diff is too big to show here.

test/reg005/run−3

This diff is too big to show here.

test/reg005/run.sh+4

This diff is too big to show here.

test/reg006/expected−2

This diff is too big to show here.

test/reg006/run−3

This diff is too big to show here.

test/reg007/expected.out+3−1

This diff is too big to show here.

test/reg007/run−3

This diff is too big to show here.

test/reg007/run.sh+3

This diff is too big to show here.

test/reg009/reg009.lidr−21

This diff is too big to show here.

test/reg009/run−3

This diff is too big to show here.

test/reg010/expected−3

This diff is too big to show here.

test/reg010/run−2

This diff is too big to show here.

test/reg011/reg011.idr−11

This diff is too big to show here.

test/reg011/run−3

This diff is too big to show here.

test/reg012/reg012.lidr−36

This diff is too big to show here.

test/reg012/run−3

This diff is too big to show here.

test/reg013/expected.out

This diff is too big to show here.

test/reg013/run.sh+1−1

This diff is too big to show here.

test/reg014/reg014.idr−14

This diff is too big to show here.

test/reg014/run−3

This diff is too big to show here.

test/reg015/reg015.idr−3

This diff is too big to show here.

test/reg015/run−3

This diff is too big to show here.

test/reg016/expected.out

This diff is too big to show here.

test/reg016/run.sh+1−1

This diff is too big to show here.

test/reg017/expected−1

This diff is too big to show here.

test/reg017/expected.out+13

This diff is too big to show here.

test/reg017/run−4

This diff is too big to show here.

test/reg017/run.sh+4

This diff is too big to show here.

test/reg018/expected−10

This diff is too big to show here.

test/reg018/run−6

This diff is too big to show here.

test/reg019/reg019.idr−7

This diff is too big to show here.

test/reg019/run−3

This diff is too big to show here.

test/reg020/expected.out

This diff is too big to show here.

test/reg020/run.sh+1−1

This diff is too big to show here.

test/reg021/reg021.idr−22

This diff is too big to show here.

test/reg021/run−3

This diff is too big to show here.

test/reg022/reg022.idr−18

This diff is too big to show here.

test/reg022/run−3

This diff is too big to show here.

test/reg023/expected−5

This diff is too big to show here.

test/reg023/run−3

This diff is too big to show here.

test/reg024/expected.out

This diff is too big to show here.

test/reg024/run.sh+1−1

This diff is too big to show here.

test/reg025/expected.out

This diff is too big to show here.

test/reg025/run.sh+1−1

This diff is too big to show here.

test/reg026/reg026.idr−16

This diff is too big to show here.

test/reg026/run−3

This diff is too big to show here.

test/reg027/expected−4

This diff is too big to show here.

test/reg027/expected.out+7

This diff is too big to show here.

test/reg027/reg027.idr+3−18

This diff is too big to show here.

test/reg027/reg027a.idr+2−2

This diff is too big to show here.

test/reg027/run−5

This diff is too big to show here.

test/reg027/run.sh+5

This diff is too big to show here.

test/reg028/expected−4

This diff is too big to show here.

test/reg028/run−4

This diff is too big to show here.

test/reg029/expected.out

This diff is too big to show here.

test/reg029/run.sh+2−2

This diff is too big to show here.

test/reg030/reg030.idr−15

This diff is too big to show here.

test/reg030/run−3

This diff is too big to show here.

test/reg031/expected.out

This diff is too big to show here.

test/reg031/run.sh+1−1

This diff is too big to show here.

test/reg032/expected.out

This diff is too big to show here.

test/reg032/run.sh+1−1

This diff is too big to show here.

test/reg033/reg033.idr−12

This diff is too big to show here.

test/reg033/run−3

This diff is too big to show here.

test/reg034/expected−4

This diff is too big to show here.

test/reg034/run−3

This diff is too big to show here.

test/reg035/expected−1

This diff is too big to show here.

test/reg035/run−5

This diff is too big to show here.

test/reg036/run−3

This diff is too big to show here.

test/reg037/run−3

This diff is too big to show here.

test/reg038/run−3

This diff is too big to show here.

test/reg039/expected.out

This diff is too big to show here.

test/reg039/run−35

This diff is too big to show here.

test/reg039/run.sh+8

This diff is too big to show here.

test/reg040/expected.out

This diff is too big to show here.

test/reg040/reg040.idr+1−1

This diff is too big to show here.

test/reg040/run−6

This diff is too big to show here.

test/reg040/run.sh+6

This diff is too big to show here.

test/reg041/expected−2

This diff is too big to show here.

test/reg041/expected.out+2

This diff is too big to show here.

test/reg041/ott.idr+24−25

This diff is too big to show here.

test/reg041/run−5

This diff is too big to show here.

test/reg041/run.sh+5

This diff is too big to show here.

test/reg042/expected.out

This diff is too big to show here.

test/reg042/run.sh+1−1

This diff is too big to show here.

test/reg044/expected−11

This diff is too big to show here.

test/reg044/run−3

This diff is too big to show here.

test/reg045/expected.out

This diff is too big to show here.

test/reg045/reg045.idr+1−1

This diff is too big to show here.

test/reg045/run.sh+1−1

This diff is too big to show here.

test/reg046/reg046.idr−19

This diff is too big to show here.

test/reg046/run−3

This diff is too big to show here.

test/reg047/reg047.idr−18

This diff is too big to show here.

test/reg047/reg047a.idr−24

This diff is too big to show here.

test/reg047/run−4

This diff is too big to show here.

test/reg048/expected

This diff is too big to show here.

test/reg048/expected.out

This diff is too big to show here.

test/reg048/reg048.idr+1−1

This diff is too big to show here.

test/reg048/run−4

This diff is too big to show here.

test/reg048/run.sh+4

This diff is too big to show here.

test/reg049/expected−4

This diff is too big to show here.

test/reg049/run−3

This diff is too big to show here.

test/reg050/expected−10

This diff is too big to show here.

test/reg050/run−5

This diff is too big to show here.

test/reg051-disabled/expected

This diff is too big to show here.

test/reg051-disabled/expected.out

This diff is too big to show here.

test/reg051-disabled/run−3

This diff is too big to show here.

test/reg051-disabled/run.sh+3

This diff is too big to show here.

test/reg052/expected.out

This diff is too big to show here.

test/reg052/reg052.idr+2−2

This diff is too big to show here.

test/reg052/run.sh+1−1

This diff is too big to show here.

test/reg053/expected

This diff is too big to show here.

test/reg053/run−3

This diff is too big to show here.

test/reg054/expected−13

This diff is too big to show here.

test/reg054/run−2

This diff is too big to show here.

test/reg055/expected−9

This diff is too big to show here.

test/reg055/run−5

This diff is too big to show here.

test/reg056/expected−2

This diff is too big to show here.

test/reg056/run−3

This diff is too big to show here.

test/reg057/expected

This diff is too big to show here.

test/reg057/run−3

This diff is too big to show here.

test/reg058/expected

This diff is too big to show here.

test/reg058/run−5

This diff is too big to show here.

test/reg059/expected

This diff is too big to show here.

test/reg059/run−3

This diff is too big to show here.

test/reg060/expected

This diff is too big to show here.

test/reg060/reg060.idr−12

This diff is too big to show here.

test/reg060/run−3

This diff is too big to show here.

test/reg061/expected

This diff is too big to show here.

test/reg061/run−3

This diff is too big to show here.

test/reg062/expected

This diff is too big to show here.

test/reg062/reg062.lidr−41

This diff is too big to show here.

test/reg062/run−4

This diff is too big to show here.

test/reg063/expected

This diff is too big to show here.

test/reg063/run−3

This diff is too big to show here.

test/reg064/expected

This diff is too big to show here.

test/reg064/reg064.idr−9

This diff is too big to show here.

test/reg064/run−3

This diff is too big to show here.

test/reg065/expected

This diff is too big to show here.

test/reg065/run−3

This diff is too big to show here.

test/reg066/expected

This diff is too big to show here.

test/reg066/run−3

This diff is too big to show here.

test/reg067/expected.out+1

This diff is too big to show here.

test/reg067/reg067.idr+23

This diff is too big to show here.

test/reg067/run.sh+5

This diff is too big to show here.

test/reg075/expected.out+6

This diff is too big to show here.

test/reg075/input.in+1

This diff is too big to show here.

test/reg075/reg075.idr+33

This diff is too big to show here.

test/reg075/run.sh+3

This diff is too big to show here.

test/reg076/expected.out+1

This diff is too big to show here.

test/reg076/input.in

This diff is too big to show here.

test/reg076/reg076.idr+11

This diff is too big to show here.

test/reg076/run.sh+4

This diff is too big to show here.

test/reg077/expected.out

This diff is too big to show here.

test/reg077/reg077.idr+17

This diff is too big to show here.

test/reg077/run.sh+3

This diff is too big to show here.

test/regression001/coverage001.idr+79

This diff is too big to show here.

test/regression001/eff001.idr+39

This diff is too big to show here.

test/regression001/expected.out

This diff is too big to show here.

test/regression001/reg001.idr+209

This diff is too big to show here.

test/regression001/reg002.idr+8

This diff is too big to show here.

test/regression001/reg003.idr+11

This diff is too big to show here.

test/regression001/reg004.lidr+43

This diff is too big to show here.

test/regression001/reg005.idr+8

This diff is too big to show here.

test/regression001/reg006.idr+14

This diff is too big to show here.

test/regression001/reg007.idr+69

This diff is too big to show here.

test/regression001/reg036.idr+2−2

This diff is too big to show here.

test/regression001/reg037.idr+2−2

This diff is too big to show here.

test/regression001/reg038.idr+4−4

This diff is too big to show here.

test/regression001/reg046.idr+19

This diff is too big to show here.

test/regression001/reg047.idr+18

This diff is too big to show here.

test/regression001/reg047a.idr+24

This diff is too big to show here.

test/regression001/reg053.idr

This diff is too big to show here.

test/regression001/reg057.idr

This diff is too big to show here.

test/regression001/reg058.idr+2−2

This diff is too big to show here.

test/regression001/reg058a.idr

This diff is too big to show here.

test/regression001/reg059.idr+2−2

This diff is too big to show here.

test/regression001/reg060.idr+12

This diff is too big to show here.

test/regression001/reg061.idr

This diff is too big to show here.

test/regression001/reg062.idr

This diff is too big to show here.

test/regression001/reg063.idr

This diff is too big to show here.

test/regression001/reg064.idr+8

This diff is too big to show here.

test/regression001/reg065.idr+6−6

This diff is too big to show here.

test/regression001/reg066.idr

This diff is too big to show here.

test/regression001/reg071.idr+19

This diff is too big to show here.

test/regression001/reg073.lidr+24

This diff is too big to show here.

test/regression001/reg074.idr+21

This diff is too big to show here.

test/regression001/run.sh+18

This diff is too big to show here.

test/regression002/A.lidr+1−1

This diff is too big to show here.

test/regression002/Canonicity.idr+13

This diff is too big to show here.

test/regression002/DoubleEquality.idr+5

This diff is too big to show here.

test/regression002/Mod.idr+12

This diff is too big to show here.

test/regression002/Negation.idr+2

This diff is too big to show here.

test/regression002/badbangop.idr

This diff is too big to show here.

test/regression002/baddoublebang.idr

This diff is too big to show here.

test/regression002/expected.out+368

This diff is too big to show here.

test/regression002/reg001.idr+2

This diff is too big to show here.

test/regression002/reg002.idr+3

This diff is too big to show here.

test/regression002/reg003.idr

This diff is too big to show here.

test/regression002/reg003a.idr

This diff is too big to show here.

test/regression002/reg006.idr+3−2

This diff is too big to show here.

test/regression002/reg007.lidr

This diff is too big to show here.

test/regression002/reg010.idr

This diff is too big to show here.

test/regression002/reg018a.idr

This diff is too big to show here.

test/regression002/reg018b.idr+1−1

This diff is too big to show here.

test/regression002/reg018c.idr

This diff is too big to show here.

test/regression002/reg018d.idr

This diff is too big to show here.

test/regression002/reg023.idr

This diff is too big to show here.

test/regression002/reg028.idr

This diff is too big to show here.

test/regression002/reg028a.idr

This diff is too big to show here.

test/regression002/reg034.idr

This diff is too big to show here.

test/regression002/reg035.idr

This diff is too big to show here.

test/regression002/reg035a.lidr+7−8

This diff is too big to show here.

test/regression002/reg035b.idr

This diff is too big to show here.

test/regression002/reg044.idr

This diff is too big to show here.

test/regression002/reg049.idr

This diff is too big to show here.

test/regression002/reg054.idr

This diff is too big to show here.

test/regression002/reg055.idr

This diff is too big to show here.

test/regression002/reg055a.idr

This diff is too big to show here.

test/regression002/reg056.idr+1−2

This diff is too big to show here.

test/regression002/reg068.idr+4

This diff is too big to show here.

test/regression002/reg069.idr+5

This diff is too big to show here.

test/regression002/reg070.idr+15

This diff is too big to show here.

test/regression002/reg076.idr+7

This diff is too big to show here.

test/regression002/reg077.idr+2

This diff is too big to show here.

test/regression002/run.sh+41

This diff is too big to show here.

test/regression002/working.idr

This diff is too big to show here.

test/regression003/expected.out+1

This diff is too big to show here.

test/regression003/regression003.idr+56

This diff is too big to show here.

test/regression003/run.sh+4

This diff is too big to show here.

test/runtest.pl−160

This diff is too big to show here.

test/scripts/timeout+17

This diff is too big to show here.

test/sourceLocation001/SourceLoc.idr+1

This diff is too big to show here.

test/sourceLocation001/expected−11

This diff is too big to show here.

test/sourceLocation001/expected.out+35

This diff is too big to show here.

test/sourceLocation001/run.sh+1−1

This diff is too big to show here.

test/st001/expected.out+8

This diff is too big to show here.

test/st001/run.sh+6

This diff is too big to show here.

test/st001/test001.idr+66

This diff is too big to show here.

test/st001/testFile.in+2

This diff is too big to show here.

test/st002/expected.out+8

This diff is too big to show here.

test/st002/run.sh+6

This diff is too big to show here.

test/st002/test002.idr+66

This diff is too big to show here.

test/st002/testFile.in+2

This diff is too big to show here.

test/st003/expected.out+8

This diff is too big to show here.

test/st003/run.sh+6

This diff is too big to show here.

test/st003/test003.idr+25

This diff is too big to show here.

test/st003/testFile.in+2

This diff is too big to show here.

test/st004/expected.out+6

This diff is too big to show here.

test/st004/run.sh+6

This diff is too big to show here.

test/st004/test004.idr+24

This diff is too big to show here.

test/st005/expected.out+6

This diff is too big to show here.

test/st005/run.sh+7

This diff is too big to show here.

test/st005/test005.idr+33

This diff is too big to show here.

test/st006/expected.out+5

This diff is too big to show here.

test/st006/run.sh+6

This diff is too big to show here.

test/st006/test006.idr+37

This diff is too big to show here.

test/st007/expected.out+6

This diff is too big to show here.

test/st007/run.sh+6

This diff is too big to show here.

test/st007/test007.idr+24

This diff is too big to show here.

test/sugar001/expected.out

This diff is too big to show here.

test/sugar001/run.sh+1−1

This diff is too big to show here.

test/sugar001/test007.idr+2−2

This diff is too big to show here.

test/sugar002/expected.out

This diff is too big to show here.

test/sugar002/run.sh+1−1

This diff is too big to show here.

test/sugar003/expected.out

This diff is too big to show here.

test/sugar003/run.sh+1−1

This diff is too big to show here.

test/sugar003/test013.idr+1−1

This diff is too big to show here.

test/sugar004/expected.out+1

This diff is too big to show here.

test/sugar004/run.sh+2−1

This diff is too big to show here.

test/sugar004/sugar004.idr+12−1

This diff is too big to show here.

test/sugar005/As.idr+1−1

This diff is too big to show here.

test/sugar005/expected.out

This diff is too big to show here.

test/sugar005/run.sh+1−1

This diff is too big to show here.

test/syntax001/expected−12

This diff is too big to show here.

test/syntax001/expected.out+26

This diff is too big to show here.

test/syntax001/run−4

This diff is too big to show here.

test/syntax001/run.sh+4

This diff is too big to show here.

test/syntax002/expected.out+2

This diff is too big to show here.

test/syntax002/run.sh+4

This diff is too big to show here.

test/syntax002/syntax002.idr+22

This diff is too big to show here.

test/tactics001/Tactics.idr+8−6

This diff is too big to show here.

test/tactics001/expected

This diff is too big to show here.

test/tactics001/expected.out

This diff is too big to show here.

test/tactics001/run−3

This diff is too big to show here.

test/tactics001/run.sh+3

This diff is too big to show here.

test/totality001/expected−6

This diff is too big to show here.

test/totality001/expected.out+18

This diff is too big to show here.

test/totality001/run−6

This diff is too big to show here.

test/totality001/run.sh+6

This diff is too big to show here.

test/totality002/expected−4

This diff is too big to show here.

test/totality002/expected.out+18

This diff is too big to show here.

test/totality002/run−5

This diff is too big to show here.

test/totality002/run.sh+5

This diff is too big to show here.

test/totality002/test017.idr+6−6

This diff is too big to show here.

test/totality003/expected.out+5−1

This diff is too big to show here.

test/totality003/run−4

This diff is too big to show here.

test/totality003/run.sh+4

This diff is too big to show here.

test/totality004/expected−5

This diff is too big to show here.

test/totality004/expected.out+13

This diff is too big to show here.

test/totality004/run−5

This diff is too big to show here.

test/totality004/run.sh+5

This diff is too big to show here.

test/totality004/totality004.idr+7−7

This diff is too big to show here.

test/totality004/totality004a.idr+7−8

This diff is too big to show here.

test/totality005/expected.out

This diff is too big to show here.

test/totality005/run−5

This diff is too big to show here.

test/totality005/run.sh+5

This diff is too big to show here.

test/totality006/expected−5

This diff is too big to show here.

test/totality006/expected.out+18

This diff is too big to show here.

test/totality006/run−5

This diff is too big to show here.

test/totality006/run.sh+5

This diff is too big to show here.

test/totality007/expected.msys+2−2

This diff is too big to show here.

test/totality007/expected.out+9

This diff is too big to show here.

test/totality007/run−3

This diff is too big to show here.

test/totality007/run.sh+3

This diff is too big to show here.

test/totality008/expected−2

This diff is too big to show here.

test/totality008/expected.out+6

This diff is too big to show here.

test/totality008/run−3

This diff is too big to show here.

test/totality008/run.sh+3

This diff is too big to show here.

test/totality008/totality008.idr+4−4

This diff is too big to show here.

test/totality009/TestLambdaPossible.idr+1

This diff is too big to show here.

test/totality009/TestLambdaPossible2.idr+16

This diff is too big to show here.

test/totality009/expected−8

This diff is too big to show here.

test/totality009/expected.out+60

This diff is too big to show here.

test/totality009/run−5

This diff is too big to show here.

test/totality009/run.sh+6

This diff is too big to show here.

test/totality010/expected.out+12

This diff is too big to show here.

test/totality010/run.sh+3

This diff is too big to show here.

test/totality010/totality010.idr+31

This diff is too big to show here.

test/totality011/expected.out+6

This diff is too big to show here.

test/totality011/run.sh+3

This diff is too big to show here.

test/totality011/totality011.lidr+31

This diff is too big to show here.

test/totality012/expected.out+12

This diff is too big to show here.

test/totality012/run.sh+5

This diff is too big to show here.

test/totality012/totality012.idr+30

This diff is too big to show here.

test/totality012/totality012a.idr+12

This diff is too big to show here.

test/totality012/totality012b.idr+18

This diff is too big to show here.

test/totality013/expected.out+12

This diff is too big to show here.

test/totality013/run.sh+4

This diff is too big to show here.

test/totality013/totality013.idr+16

This diff is too big to show here.

test/totality013/totality013a.idr+17

This diff is too big to show here.

test/totality014/expected.out+13

This diff is too big to show here.

test/totality014/run.sh+3

This diff is too big to show here.

test/totality014/totality014.idr+7

This diff is too big to show here.

test/totality015/expected.out+18

This diff is too big to show here.

test/totality015/run.sh+4

This diff is too big to show here.

test/totality015/totality015.idr+70

This diff is too big to show here.

test/totality015/totality015a.idr+63

This diff is too big to show here.

test/totality016/expected.out+54

This diff is too big to show here.

test/totality016/run.sh+3

This diff is too big to show here.

test/totality016/totality016.idr+48

This diff is too big to show here.

test/totality017/expected.out+36

This diff is too big to show here.

test/totality017/run.sh+3

This diff is too big to show here.

test/totality017/totality017.idr+49

This diff is too big to show here.

test/totality018/expected.out+6

This diff is too big to show here.

test/totality018/run.sh+3

This diff is too big to show here.

test/totality018/totality018.idr+15

This diff is too big to show here.

test/totality019/expected.out+12

This diff is too big to show here.

test/totality019/run.sh+4

This diff is too big to show here.

test/totality019/totality019.idr+14

This diff is too big to show here.

test/totality019/totality019a.idr+81

This diff is too big to show here.

test/totality020/expected.out+12

This diff is too big to show here.

test/totality020/run.sh+3

This diff is too big to show here.

test/totality020/totality020.idr+11

This diff is too big to show here.

test/totality021/expected.out+30

This diff is too big to show here.

test/totality021/run.sh+4

This diff is too big to show here.

test/totality021/totality021.idr+18

This diff is too big to show here.

test/totality021/totality021a.idr+12

This diff is too big to show here.

test/totality022/expected.out+6

This diff is too big to show here.

test/totality022/run.sh+3

This diff is too big to show here.

test/totality022/totality022.idr+11

This diff is too big to show here.

test/totality023/expected.out+6

This diff is too big to show here.

test/totality023/run.sh+3

This diff is too big to show here.

test/totality023/totality023.idr+11

This diff is too big to show here.

test/totality024/expected.out+1

This diff is too big to show here.

test/totality024/run.sh+3

This diff is too big to show here.

test/totality024/totality023.idr+7

This diff is too big to show here.

test/totality025/expected.out+18

This diff is too big to show here.

test/totality025/run.sh+3

This diff is too big to show here.

test/totality025/totality025.idr+17

This diff is too big to show here.

test/totality026/expected.out+6

This diff is too big to show here.

test/totality026/run.sh+3

This diff is too big to show here.

test/totality026/totality026.idr+7

This diff is too big to show here.

test/tutorial001/expected

This diff is too big to show here.

test/tutorial001/expected.out

This diff is too big to show here.

test/tutorial001/run−3

This diff is too big to show here.

test/tutorial001/run.sh+3

This diff is too big to show here.

test/tutorial002/expected

This diff is too big to show here.

test/tutorial002/expected.out+18

This diff is too big to show here.

test/tutorial002/run−3

This diff is too big to show here.

test/tutorial002/run.sh+3

This diff is too big to show here.

test/tutorial002/tutorial002.idr+16−16

This diff is too big to show here.

test/tutorial003/expected

This diff is too big to show here.

test/tutorial003/expected.out

This diff is too big to show here.

test/tutorial003/run−3

This diff is too big to show here.

test/tutorial003/run.sh+3

This diff is too big to show here.

test/tutorial003/tutorial003.idr+2−2

This diff is too big to show here.

test/tutorial004/expected

This diff is too big to show here.

test/tutorial004/expected.out+12

This diff is too big to show here.

test/tutorial004/run−3

This diff is too big to show here.

test/tutorial004/run.sh+3

This diff is too big to show here.

test/tutorial005/expected

This diff is too big to show here.

test/tutorial005/expected.out

This diff is too big to show here.

test/tutorial005/run−3

This diff is too big to show here.

test/tutorial005/run.sh+3

This diff is too big to show here.

test/tutorial006/expected−24

This diff is too big to show here.

test/tutorial006/expected.out+37

This diff is too big to show here.

test/tutorial006/run−4

This diff is too big to show here.

test/tutorial006/run.sh+5

This diff is too big to show here.

test/tutorial006/tutorial006b.idr+6−6

This diff is too big to show here.

test/tutorial006/tutorial006c.idr+20

This diff is too big to show here.

test/tutorial007/Providers.idr+27

This diff is too big to show here.

test/tutorial007/expected.out+1

This diff is too big to show here.

test/tutorial007/nativetypes.c+13

This diff is too big to show here.

test/tutorial007/run.sh+5

This diff is too big to show here.

test/tutorial007/tutorial007.idr+12

This diff is too big to show here.

test/unique001/expected−21

This diff is too big to show here.

test/unique001/expected.out+4

This diff is too big to show here.

test/unique001/run−9

This diff is too big to show here.

test/unique001/run.sh+6

This diff is too big to show here.

test/unique001/unique001.idr+2

This diff is too big to show here.

test/unique002/expected−5

This diff is too big to show here.

test/unique002/run−4

This diff is too big to show here.

test/unique003/expected−4

This diff is too big to show here.

test/unique003/run−3

This diff is too big to show here.

test/unique004/expected.out+75

This diff is too big to show here.

test/unique004/run.sh+14

This diff is too big to show here.

test/unique004/unique001a.idr+2

This diff is too big to show here.

test/unique004/unique001b.idr+2

This diff is too big to show here.

test/unique004/unique001c.idr+4−7

This diff is too big to show here.

test/unique004/unique001d.idr+1

This diff is too big to show here.

test/unique004/unique001e.idr+1

This diff is too big to show here.

test/unique004/unique002.idr+3−1

This diff is too big to show here.

test/unique004/unique002a.idr+3−1

This diff is too big to show here.

test/unique004/unique003.idr+3−1

This diff is too big to show here.

test/universes001/expected.out+14

This diff is too big to show here.

test/universes001/run.sh+3

This diff is too big to show here.

test/universes001/universes001.idr+8

This diff is too big to show here.

test/universes002/expected.out+14

This diff is too big to show here.

test/universes002/run.sh+3

This diff is too big to show here.

test/universes002/universes002.idr+45

This diff is too big to show here.

test/views001/expected.out+5

This diff is too big to show here.

test/views001/run.sh+6

This diff is too big to show here.

test/views001/views001.idr+43

This diff is too big to show here.

test/views001/views001a.idr+29

This diff is too big to show here.

test/views002/expected.out+2

This diff is too big to show here.

test/views002/run.sh+4

This diff is too big to show here.

test/views002/views002.idr+26

This diff is too big to show here.

test/views003/expected.out+1

This diff is too big to show here.

test/views003/run.sh+4

This diff is too big to show here.

test/views003/views003.idr+31

This diff is too big to show here.