on master help sign in
725 files changed+12827−748
since splitsnapshots
unifiedsplit
.travis.yml+54−36 CHANGELOG.md+3 CITATION.md+1−1 CONTRIBUTING.md+5−5 INSTALL.md+11−2 Makefile+4−4 README.md+7−4 Setup.hs−33 appveyor.yml+3−3 azure-pipelines.yml+1−1 benchmarks/pidigits/pidigits.idr+1−1 docs/LICENSE+1−1 docs/Makefile+1−1 docs/README.md+3−3 docs/_static/theme_overrides.css+13 docs/conf.py+9−2 docs/effects/conclusions.rst+1−1 docs/effects/depeff.rst+16−7 docs/effects/index.rst+1−1 docs/effects/introduction.rst+3−2 docs/effects/summary.rst+23−23 docs/elaboratorReflection/elabReflection.rst+60 docs/reference/elaborator-reflection.rst → docs/elaboratorReflection/elaborator-reflection.rst+11−5 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+2−2 docs/guides/index.rst+1−1 docs/guides/theorem-prover.rst+1−1 docs/guides/type-providers-ffi.rst+1−1 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/parserModules.png docs/image/parserModules.svg+1251 docs/image/parserTopLevel.png docs/image/parserTopLevel.svg+294 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+3−1 docs/listing/idris-prompt-helloworld.txt+1−1 docs/listing/idris-prompt-interp.txt+1−1 docs/listing/idris-prompt-start.txt+1−1 docs/make.bat+1−1 docs/parserLibrary/index.rst+24 docs/parserLibrary/introduction.rst+76 docs/parserLibrary/lexer.rst+288 docs/parserLibrary/parser.rst+700 docs/parserLibrary/whitespace.rst+250 docs/proofs/definitional.rst+12−8 docs/proofs/index.rst+2−2 docs/proofs/interactive.rst+17−17 docs/proofs/pluscomm.rst+1−1 docs/proofs/propositional.rst+27−22 docs/reference/codegen.rst+6−4 docs/reference/compilation.rst+15−15 docs/reference/erasure.rst+3−3 docs/reference/ffi.rst+7−6 docs/reference/index.rst+1−2 docs/reference/internals.rst+31−28 docs/reference/language-extensions.rst+8−3 docs/reference/misc.rst+5−5 docs/reference/partial-evaluation.rst+2−2 docs/reference/type-directed-search.rst+1−1 docs/reference/uniqueness-types.rst+2−2 docs/st/index.rst+1−1 docs/st/introduction.rst+1−1 docs/tutorial/conclusions.rst+5−5 docs/tutorial/index.rst+1−1 docs/tutorial/introduction.rst+2−2 docs/tutorial/miscellany.rst+1−1 docs/tutorial/syntax.rst+3−3 idris-tutorial.pdf idris.cabal+103−49 libs/base/Control/Isomorphism.idr+20−23 libs/base/Data/Fin.idr+9 libs/base/Data/List/Quantifiers.idr+5 libs/base/Data/So.idr+11−1 libs/contrib/Control/Algebra/Laws.idr+128−80 libs/contrib/Data/Combinators.idr+2−2 libs/contrib/Data/List/Extra.idr−46 libs/contrib/Data/List/Reverse.idr+99 libs/contrib/Data/Nat/Fact.idr+56 libs/contrib/Data/Nat/Parity.idr+155−29 libs/contrib/Language/JSON.idr+1−1 libs/contrib/contrib.ipkg+1−1 libs/prelude/IO.idr+1−1 libs/prelude/Prelude/File.idr+3−2 libs/prelude/Prelude/Nat.idr+32−61 man/idris.1+1−1 rts/idris_bitstring.c−2 rts/idris_rts.c−10 rts/idris_rts.h−4 rts/idris_stdfgn.c+12−2 rts/idris_stdfgn.h+4−1 rts/idris_utf8.c−1 src/IRTS/Portable.hs+1 src/Idris/CmdOptions.hs+4−3 src/Idris/Core/CaseTree.hs+1−1 src/Idris/Core/TT.hs+6 src/Idris/ModeCommon.hs+1−1 src/Idris/Parser/Stack.hs+16−2 src/Idris/Reflection.hs+1−1 stack-11.22.yaml+21 stack-12.26.yaml+20 stack-15.3.yaml+17 stack-15.4.yaml+17 stack-alt.yaml−25 stack.yaml+1−24 test/README.md+5−5 test/TestRun.hs+2−2 test/base001/expected → test/base001/expected.out test/base001/run → test/base001/run.sh+1−1 test/basic001/expected → test/basic001/expected.out test/basic001/run → test/basic001/run.sh test/basic002/expected → test/basic002/expected.out test/basic002/run → test/basic002/run.sh test/basic003/expected → test/basic003/expected.out test/basic003/run → test/basic003/run.sh test/basic004/expected → test/basic004/expected.out test/basic004/run → test/basic004/run.sh test/basic005/expected → test/basic005/expected.out test/basic005/run → test/basic005/run.sh test/basic006/expected → test/basic006/expected.out test/basic006/run → test/basic006/run.sh test/basic007/expected → test/basic007/expected.out test/basic007/run → test/basic007/run.sh test/basic008/expected → test/basic008/expected.out test/basic008/run → test/basic008/run.sh test/basic009/expected → test/basic009/expected.out test/basic009/run → test/basic009/run.sh test/basic010/expected → test/basic010/expected.out test/basic010/run → test/basic010/run.sh test/basic011/expected → test/basic011/expected.out test/basic011/run → test/basic011/run.sh test/basic012/expected → test/basic012/expected.out test/basic012/run → test/basic012/run.sh test/basic013/expected → test/basic013/expected.out test/basic013/run → test/basic013/run.sh test/basic014/expected → test/basic014/expected.out test/basic014/run → test/basic014/run.sh test/basic015/expected → test/basic015/expected.out test/basic015/run → test/basic015/run.sh test/basic016/expected → test/basic016/expected.out test/basic016/run → test/basic016/run.sh test/basic017/expected → test/basic017/expected.out test/basic017/run → test/basic017/run.sh test/basic018/expected → test/basic018/expected.out test/basic018/run → test/basic018/run.sh test/basic019/expected → test/basic019/expected.out test/basic019/run → test/basic019/run.sh test/basic020/expected → test/basic020/expected.out test/basic020/run → test/basic020/run.sh test/basic021/expected → test/basic021/expected.out test/basic021/run → test/basic021/run.sh test/basic022/expected → test/basic022/expected.out test/basic022/run → test/basic022/run.sh test/basic023/expected → test/basic023/expected.out test/basic023/run → test/basic023/run.sh test/basic024/expected → test/basic024/expected.out test/basic024/input → test/basic024/input.in test/basic024/run → test/basic024/run.sh+1−1 test/basic025/expected → test/basic025/expected.out test/basic025/input → test/basic025/input.in test/basic025/run → test/basic025/run.sh+2−2 test/basic026/expected → test/basic026/expected.out test/basic026/run → test/basic026/run.sh test/bignum001/expected → test/bignum001/expected.out test/bignum001/run → test/bignum001/run.sh test/bignum002/expected → test/bignum002/expected.out test/bignum002/run → test/bignum002/run.sh test/bignum003/expected → test/bignum003/expected.out test/bignum003/run → test/bignum003/run.sh test/bounded001/expected → test/bounded001/expected.out test/bounded001/run → test/bounded001/run.sh test/buffer001/expected → test/buffer001/expected.out test/buffer001/run → test/buffer001/run.sh test/buffer002/expected → test/buffer002/expected.out test/buffer002/run → test/buffer002/run.sh test/contrib001/expected → test/contrib001/expected.out test/contrib001/run → test/contrib001/run.sh test/corecords001/expected → test/corecords001/expected.out test/corecords001/run → test/corecords001/run.sh test/corecords002/expected → test/corecords002/expected.out test/corecords002/run → test/corecords002/run.sh test/delab001/expected → test/delab001/expected.out test/delab001/input → test/delab001/input.in test/delab001/run → test/delab001/run.sh+1−1 test/directives001/expected → test/directives001/expected.out test/directives001/run → test/directives001/run.sh test/directives002/expected → test/directives002/expected.out test/directives002/run → test/directives002/run.sh test/directives003/expected → test/directives003/expected.out test/directives003/run → test/directives003/run.sh test/disambig002/expected → test/disambig002/expected.out test/disambig002/run → test/disambig002/run.sh test/docs001/expected → test/docs001/expected.out test/docs001/input → test/docs001/input.in test/docs001/run → test/docs001/run.sh+1−1 test/docs002/expected → test/docs002/expected.out test/docs002/input → test/docs002/input.in test/docs002/run → test/docs002/run.sh+1−1 test/docs003/expected → test/docs003/expected.out test/docs003/input → test/docs003/input.in test/docs003/run → test/docs003/run.sh+1−1 test/docs004/expected → test/docs004/expected.out test/docs004/input → test/docs004/input.in test/docs004/run → test/docs004/run.sh+1−1 test/docs005/expected → test/docs005/expected.out test/docs005/input → test/docs005/input.in test/docs005/run → test/docs005/run.sh+1−1 test/docs006/expected → test/docs006/expected.out test/docs006/input → test/docs006/input.in test/docs006/run → test/docs006/run.sh+1−1 test/dsl001/expected → test/dsl001/expected.out test/dsl001/input → test/dsl001/input.in test/dsl001/run → test/dsl001/run.sh+1−1 test/dsl002/expected → test/dsl002/expected.out test/dsl002/run → test/dsl002/run.sh test/dsl002/test → test/dsl002/test.in test/dsl002/test014.idr+1−1 test/dsl003/expected → test/dsl003/expected.out test/dsl003/run → test/dsl003/run.sh test/dsl004/expected → test/dsl004/expected.out test/dsl004/run → test/dsl004/run.sh test/effects001/expected → test/effects001/expected.out test/effects001/run → test/effects001/run.sh test/effects001/test021.idr+1−1 test/effects001/testFile → test/effects001/testFile.in test/effects002/expected → test/effects002/expected.out test/effects002/run → test/effects002/run.sh test/effects003/expected → test/effects003/expected.out test/effects003/input → test/effects003/input.in test/effects003/run → test/effects003/run.sh+1−1 test/effects004/expected → test/effects004/expected.out test/effects004/input → test/effects004/input.in test/effects004/run → test/effects004/run.sh+1−1 test/effects005/expected → test/effects005/expected.out test/effects005/run → test/effects005/run.sh test/error001/expected → test/error001/expected.out test/error001/run → test/error001/run.sh test/error002/expected → test/error002/expected.out test/error002/run → test/error002/run.sh test/error003/expected → test/error003/expected.out test/error003/run → test/error003/run.sh test/error004/expected → test/error004/expected.out test/error004/run → test/error004/run.sh test/error005/expected → test/error005/expected.out test/error005/run → test/error005/run.sh test/error006/expected → test/error006/expected.out test/error006/run → test/error006/run.sh test/error007/expected → test/error007/expected.out test/error007/run → test/error007/run.sh test/error008/expected → test/error008/expected.out test/error008/run → test/error008/run.sh test/error009/expected → test/error009/expected.out test/error009/run → test/error009/run.sh test/ffi001/expected → test/ffi001/expected.out test/ffi001/run → test/ffi001/run.sh test/ffi002/expected → test/ffi002/expected.out test/ffi002/run → test/ffi002/run.sh test/ffi003/expected → test/ffi003/expected.out test/ffi003/input → test/ffi003/input.in test/ffi003/run → test/ffi003/run.sh+1−1 test/ffi004/expected → test/ffi004/expected.out test/ffi004/run → test/ffi004/run.sh test/ffi005/expected → test/ffi005/expected.out test/ffi005/run → test/ffi005/run.sh test/ffi006/expected → test/ffi006/expected.out test/ffi006/run → test/ffi006/run.sh test/ffi007/expected → test/ffi007/expected.out test/ffi007/run → test/ffi007/run.sh test/ffi008/expected → test/ffi008/expected.out test/ffi008/run → test/ffi008/run.sh test/ffi009/expected → test/ffi009/expected.out test/ffi009/run → test/ffi009/run.sh test/ffi010/expected → test/ffi010/expected.out test/ffi010/run → test/ffi010/run.sh test/ffi011/expected → test/ffi011/expected.out test/ffi011/ffi011 → test/ffi011/ffi011.js test/ffi011/run → test/ffi011/run.sh+1−1 test/ffi012/expected → test/ffi012/expected.out test/ffi012/ffi012 → test/ffi012/ffi012.js test/ffi012/run → test/ffi012/run.sh test/ffi013/expected → test/ffi013/expected.out test/ffi013/run → test/ffi013/run.sh test/folding001/expected → test/folding001/expected.out test/folding001/run → test/folding001/run.sh test/idrisdoc001/expected → test/idrisdoc001/expected.out test/idrisdoc001/run → test/idrisdoc001/run.sh test/idrisdoc002/expected → test/idrisdoc002/expected.out test/idrisdoc002/run → test/idrisdoc002/run.sh test/idrisdoc003/expected → test/idrisdoc003/expected.out test/idrisdoc003/run → test/idrisdoc003/run.sh test/idrisdoc004/expected → test/idrisdoc004/expected.out test/idrisdoc004/run → test/idrisdoc004/run.sh test/idrisdoc005/expected → test/idrisdoc005/expected.out test/idrisdoc005/run → test/idrisdoc005/run.sh test/idrisdoc006/expected → test/idrisdoc006/expected.out test/idrisdoc006/run → test/idrisdoc006/run.sh test/idrisdoc007/expected → test/idrisdoc007/expected.out test/idrisdoc007/run → test/idrisdoc007/run.sh test/idrisdoc008/expected → test/idrisdoc008/expected.out test/idrisdoc008/run → test/idrisdoc008/run.sh test/idrisdoc009/expected → test/idrisdoc009/expected.out test/idrisdoc009/input → test/idrisdoc009/input.in test/idrisdoc009/run → test/idrisdoc009/run.sh+1−1 test/interactive001/expected → test/interactive001/expected.out test/interactive001/input → test/interactive001/input.in test/interactive001/run → test/interactive001/run.sh+1−1 test/interactive002/expected → test/interactive002/expected.out test/interactive002/input → test/interactive002/input.in test/interactive002/run → test/interactive002/run.sh+1−1 test/interactive003/expected → test/interactive003/expected.out test/interactive003/input → test/interactive003/input.in test/interactive003/run → test/interactive003/run.sh+1−1 test/interactive004/expected → test/interactive004/expected.out test/interactive004/input → test/interactive004/input.in test/interactive004/run → test/interactive004/run.sh+1−1 test/interactive005/expected → test/interactive005/expected.out test/interactive005/input → test/interactive005/input.in test/interactive005/run → test/interactive005/run.sh+1−1 test/interactive006/expected → test/interactive006/expected.out test/interactive006/input → test/interactive006/input.in test/interactive006/run → test/interactive006/run.sh+1−1 test/interactive007/expected → test/interactive007/expected.out test/interactive007/input → test/interactive007/input.in test/interactive007/run → test/interactive007/run.sh+1−1 test/interactive008/expected → test/interactive008/expected.out test/interactive008/input → test/interactive008/input.in test/interactive008/run−2 test/interactive008/run.sh+2 test/interactive009/expected → test/interactive009/expected.out test/interactive009/input → test/interactive009/input.in test/interactive009/run → test/interactive009/run.sh+1−1 test/interactive010/expected → test/interactive010/expected.out test/interactive010/input → test/interactive010/input.in test/interactive010/run → test/interactive010/run.sh+1−1 test/interactive011/expected → test/interactive011/expected.out test/interactive011/input → test/interactive011/input.in test/interactive011/run → test/interactive011/run.sh+1−1 test/interactive012/expected → test/interactive012/expected.out test/interactive012/input → test/interactive012/input.in test/interactive012/run → test/interactive012/run.sh+1−1 test/interactive013/expected → test/interactive013/expected.out test/interactive013/input → test/interactive013/input.in test/interactive013/run → test/interactive013/run.sh+1−1 test/interactive014/expected → test/interactive014/expected.out test/interactive014/input → test/interactive014/input.in test/interactive014/run → test/interactive014/run.sh+1−1 test/interactive015/expected → test/interactive015/expected.out test/interactive015/input → test/interactive015/input.in test/interactive015/run → test/interactive015/run.sh+1−1 test/interactive016/expected → test/interactive016/expected.out test/interactive016/input → test/interactive016/input.in test/interactive016/run → test/interactive016/run.sh+1−1 test/interactive017/expected → test/interactive017/expected.out test/interactive017/run → test/interactive017/run.sh test/interactive018/expected → test/interactive018/expected.out test/interactive018/input → test/interactive018/input.in test/interactive018/run−3 test/interactive018/run.sh+3 test/interfaces001/expected → test/interfaces001/expected.out test/interfaces001/input → test/interfaces001/input.in test/interfaces001/run → test/interfaces001/run.sh+1−1 test/interfaces002/expected → test/interfaces002/expected.out test/interfaces002/run → test/interfaces002/run.sh test/interfaces003/expected → test/interfaces003/expected.out test/interfaces003/run → test/interfaces003/run.sh test/interfaces004/expected → test/interfaces004/expected.out test/interfaces004/run → test/interfaces004/run.sh test/interfaces005/expected → test/interfaces005/expected.out test/interfaces005/run → test/interfaces005/run.sh test/interfaces006/expected → test/interfaces006/expected.out test/interfaces006/run → test/interfaces006/run.sh test/interfaces007/expected → test/interfaces007/expected.out test/interfaces007/run → test/interfaces007/run.sh test/interfaces008/expected → test/interfaces008/expected.out test/interfaces008/run → test/interfaces008/run.sh test/interfaces009/expected → test/interfaces009/expected.out test/interfaces009/run → test/interfaces009/run.sh test/interfaces010/expected → test/interfaces010/expected.out test/interfaces010/run → test/interfaces010/run.sh test/interpret001/expected → test/interpret001/expected.out test/interpret001/input → test/interpret001/input.in test/interpret001/run → test/interpret001/run.sh+1−1 test/interpret002/expected → test/interpret002/expected.out test/interpret002/input → test/interpret002/input.in test/interpret002/run → test/interpret002/run.sh+1−1 test/interpret003/expected → test/interpret003/expected.out test/interpret003/input → test/interpret003/input.in test/interpret003/run → test/interpret003/run.sh+1−1 test/io001/expected → test/io001/expected.out test/io001/run → test/io001/run.sh test/io002/expected → test/io002/expected.out test/io002/run → test/io002/run.sh test/io003/expected → test/io003/expected.out test/io003/run → test/io003/run.sh test/layout001/expected → test/layout001/expected.out test/layout001/run → test/layout001/run.sh test/literate001/expected → test/literate001/expected.out test/literate001/run → test/literate001/run.sh test/meta001/expected → test/meta001/expected.out test/meta001/run → test/meta001/run.sh test/meta002/expected → test/meta002/expected.out test/meta002/run → test/meta002/run.sh test/meta003/expected → test/meta003/expected.out test/meta003/run → test/meta003/run.sh test/meta004/expected → test/meta004/expected.out test/meta004/run → test/meta004/run.sh test/pkg001/expected → test/pkg001/expected.out test/pkg001/run → test/pkg001/run.sh test/pkg001/test-pkg.ipkg+3−3 test/pkg002/expected → test/pkg002/expected.out test/pkg002/run → test/pkg002/run.sh test/pkg003/expected → test/pkg003/expected.out test/pkg003/run → test/pkg003/run.sh test/pkg004/expected → test/pkg004/expected.out test/pkg004/run → test/pkg004/run.sh test/pkg005/expected → test/pkg005/expected.out test/pkg005/run → test/pkg005/run.sh test/pkg006/expected → test/pkg006/expected.out test/pkg006/run → test/pkg006/run.sh test/pkg007/expected → test/pkg007/expected.out test/pkg007/input → test/pkg007/input.in test/pkg007/run → test/pkg007/run.sh+1−1 test/pkg008/expected → test/pkg008/expected.out test/pkg008/run → test/pkg008/run.sh test/pkg009/expected → test/pkg009/expected.out test/pkg009/run → test/pkg009/run.sh test/pkg010/expected−31 test/pkg010/expected.out+29 test/pkg010/run → test/pkg010/run.sh test/prelude001/expected → test/prelude001/expected.out test/prelude001/run → test/prelude001/run.sh test/primitives001/expected → test/primitives001/expected.out test/primitives001/input → test/primitives001/input.in test/primitives001/run → test/primitives001/run.sh+1−1 test/primitives002/expected → test/primitives002/expected.out test/primitives002/run → test/primitives002/run.sh test/primitives003/expected → test/primitives003/expected.out test/primitives003/run → test/primitives003/run.sh test/primitives004-disabled/expected → test/primitives004-disabled/expected.out test/primitives004-disabled/run → test/primitives004-disabled/run.sh test/primitives005/expected → test/primitives005/expected.out test/primitives005/run → test/primitives005/run.sh test/primitives006/expected → test/primitives006/expected.out test/primitives006/run → test/primitives006/run.sh test/proof001/expected → test/proof001/expected.out test/proof001/run → test/proof001/run.sh test/proof002/expected → test/proof002/expected.out test/proof002/run → test/proof002/run.sh test/proof003/expected → test/proof003/expected.out test/proof003/run → test/proof003/run.sh test/proof004/expected → test/proof004/expected.out test/proof004/run → test/proof004/run.sh test/proof005/expected → test/proof005/expected.out test/proof005/run → test/proof005/run.sh test/proof006/expected → test/proof006/expected.out test/proof006/run → test/proof006/run.sh test/proof007/expected → test/proof007/expected.out test/proof007/run → test/proof007/run.sh test/proof008/expected → test/proof008/expected.out test/proof008/run → test/proof008/run.sh test/proof009/expected → test/proof009/expected.out test/proof009/input → test/proof009/input.in test/proof009/run → test/proof009/run.sh+1−1 test/proof010/expected → test/proof010/expected.out test/proof010/run → test/proof010/run.sh test/proof011/expected → test/proof011/expected.out test/proof011/run → test/proof011/run.sh test/proofsearch001/expected → test/proofsearch001/expected.out test/proofsearch001/run → test/proofsearch001/run.sh test/proofsearch002/expected → test/proofsearch002/expected.out test/proofsearch002/run → test/proofsearch002/run.sh test/proofsearch003/expected → test/proofsearch003/expected.out test/proofsearch003/run → test/proofsearch003/run.sh test/pruviloj001/expected → test/pruviloj001/expected.out test/pruviloj001/run → test/pruviloj001/run.sh test/quasiquote001/expected → test/quasiquote001/expected.out test/quasiquote001/run → test/quasiquote001/run.sh test/quasiquote002/expected → test/quasiquote002/expected.out test/quasiquote002/run → test/quasiquote002/run.sh test/quasiquote003/expected → test/quasiquote003/expected.out test/quasiquote003/run → test/quasiquote003/run.sh test/quasiquote004/expected → test/quasiquote004/expected.out test/quasiquote004/run → test/quasiquote004/run.sh test/quasiquote005/expected → test/quasiquote005/expected.out test/quasiquote005/run → test/quasiquote005/run.sh test/quasiquote006/expected → test/quasiquote006/expected.out test/quasiquote006/run → test/quasiquote006/run.sh test/records001/expected → test/records001/expected.out test/records001/run → test/records001/run.sh test/records002/expected → test/records002/expected.out test/records002/run → test/records002/run.sh test/records003/expected → test/records003/expected.out test/records003/run → test/records003/run.sh test/records004/expected → test/records004/expected.out test/records004/run → test/records004/run.sh test/records005/expected → test/records005/expected.out test/records005/run → test/records005/run.sh test/reg001/expected → test/reg001/expected.out test/reg001/run → test/reg001/run.sh test/reg002/expected → test/reg002/expected.out test/reg002/run → test/reg002/run.sh test/reg004/expected → test/reg004/expected.out test/reg004/run → test/reg004/run.sh test/reg005/expected → test/reg005/expected.out test/reg005/run → test/reg005/run.sh test/reg007/expected → test/reg007/expected.out test/reg007/run → test/reg007/run.sh test/reg013/expected → test/reg013/expected.out test/reg013/run → test/reg013/run.sh test/reg016/expected → test/reg016/expected.out test/reg016/run → test/reg016/run.sh test/reg017/expected → test/reg017/expected.out test/reg017/run → test/reg017/run.sh test/reg020/expected → test/reg020/expected.out test/reg020/run → test/reg020/run.sh test/reg024/expected → test/reg024/expected.out test/reg024/run → test/reg024/run.sh test/reg025/expected → test/reg025/expected.out test/reg025/run → test/reg025/run.sh test/reg027/expected → test/reg027/expected.out test/reg027/run → test/reg027/run.sh test/reg029/expected → test/reg029/expected.out test/reg029/run → test/reg029/run.sh test/reg031/expected → test/reg031/expected.out test/reg031/run → test/reg031/run.sh test/reg032/expected → test/reg032/expected.out test/reg032/run → test/reg032/run.sh test/reg039/expected → test/reg039/expected.out test/reg039/run → test/reg039/run.sh test/reg040/expected → test/reg040/expected.out test/reg040/run → test/reg040/run.sh test/reg041/expected → test/reg041/expected.out test/reg041/run → test/reg041/run.sh test/reg042/expected → test/reg042/expected.out test/reg042/run → test/reg042/run.sh test/reg045/expected → test/reg045/expected.out test/reg045/run → test/reg045/run.sh test/reg048/expected → test/reg048/expected.out test/reg048/run → test/reg048/run.sh test/reg051-disabled/expected → test/reg051-disabled/expected.out test/reg051-disabled/run → test/reg051-disabled/run.sh test/reg052/expected → test/reg052/expected.out test/reg052/run → test/reg052/run.sh test/reg067/expected → test/reg067/expected.out test/reg067/run → test/reg067/run.sh test/reg075/expected → test/reg075/expected.out test/reg075/input → test/reg075/input.in test/reg075/run−3 test/reg075/run.sh+3 test/reg076/expected → test/reg076/expected.out test/reg076/input → test/reg076/input.in test/reg076/run → test/reg076/run.sh test/reg077/expected → test/reg077/expected.out test/reg077/run → test/reg077/run.sh test/regression001/expected → test/regression001/expected.out test/regression001/run → test/regression001/run.sh test/regression002/expected → test/regression002/expected.out test/regression002/run → test/regression002/run.sh test/regression003/expected → test/regression003/expected.out test/regression003/run → test/regression003/run.sh test/sourceLocation001/expected → test/sourceLocation001/expected.out test/sourceLocation001/run → test/sourceLocation001/run.sh test/st001/expected → test/st001/expected.out test/st001/run → test/st001/run.sh test/st001/test001.idr+1−1 test/st001/testFile → test/st001/testFile.in test/st002/expected → test/st002/expected.out test/st002/run → test/st002/run.sh test/st002/test002.idr+1−1 test/st002/testFile → test/st002/testFile.in test/st003/expected → test/st003/expected.out test/st003/run → test/st003/run.sh test/st003/test003.idr+1−1 test/st003/testFile → test/st003/testFile.in test/st004/expected → test/st004/expected.out test/st004/run → test/st004/run.sh test/st005/expected → test/st005/expected.out test/st005/run → test/st005/run.sh test/st006/expected → test/st006/expected.out test/st006/run → test/st006/run.sh test/st007/expected → test/st007/expected.out test/st007/run → test/st007/run.sh test/sugar001/expected → test/sugar001/expected.out test/sugar001/run → test/sugar001/run.sh test/sugar002/expected → test/sugar002/expected.out test/sugar002/run → test/sugar002/run.sh test/sugar003/expected → test/sugar003/expected.out test/sugar003/run → test/sugar003/run.sh test/sugar004/expected → test/sugar004/expected.out test/sugar004/run → test/sugar004/run.sh test/sugar005/expected → test/sugar005/expected.out test/sugar005/run → test/sugar005/run.sh test/syntax001/expected → test/syntax001/expected.out test/syntax001/run → test/syntax001/run.sh test/syntax002/expected → test/syntax002/expected.out test/syntax002/run → test/syntax002/run.sh test/tactics001/expected → test/tactics001/expected.out test/tactics001/run → test/tactics001/run.sh test/totality001/expected → test/totality001/expected.out test/totality001/run → test/totality001/run.sh test/totality002/expected → test/totality002/expected.out test/totality002/run → test/totality002/run.sh test/totality003/expected → test/totality003/expected.out test/totality003/run → test/totality003/run.sh test/totality004/expected → test/totality004/expected.out test/totality004/run → test/totality004/run.sh test/totality005/expected → test/totality005/expected.out test/totality005/run → test/totality005/run.sh test/totality006/expected → test/totality006/expected.out test/totality006/run → test/totality006/run.sh test/totality007/expected → test/totality007/expected.out test/totality007/run → test/totality007/run.sh test/totality008/expected → test/totality008/expected.out test/totality008/run → test/totality008/run.sh test/totality009/expected → test/totality009/expected.out test/totality009/run → test/totality009/run.sh test/totality010/expected → test/totality010/expected.out test/totality010/run → test/totality010/run.sh test/totality011/expected → test/totality011/expected.out test/totality011/run → test/totality011/run.sh test/totality012/expected → test/totality012/expected.out test/totality012/run → test/totality012/run.sh test/totality013/expected → test/totality013/expected.out test/totality013/run → test/totality013/run.sh test/totality014/expected → test/totality014/expected.out test/totality014/run → test/totality014/run.sh test/totality015/expected → test/totality015/expected.out test/totality015/run → test/totality015/run.sh test/totality016/expected → test/totality016/expected.out test/totality016/run → test/totality016/run.sh test/totality017/expected → test/totality017/expected.out test/totality017/run → test/totality017/run.sh test/totality018/expected → test/totality018/expected.out test/totality018/run → test/totality018/run.sh test/totality019/expected → test/totality019/expected.out test/totality019/run → test/totality019/run.sh test/totality020/expected → test/totality020/expected.out test/totality020/run → test/totality020/run.sh test/totality021/expected → test/totality021/expected.out test/totality021/run → test/totality021/run.sh test/totality022/expected → test/totality022/expected.out test/totality022/run → test/totality022/run.sh test/totality023/expected → test/totality023/expected.out test/totality023/run → test/totality023/run.sh test/totality024/expected → test/totality024/expected.out test/totality024/run → test/totality024/run.sh test/totality025/expected → test/totality025/expected.out test/totality025/run → test/totality025/run.sh test/totality026/expected → test/totality026/expected.out test/totality026/run → test/totality026/run.sh test/tutorial001/expected → test/tutorial001/expected.out test/tutorial001/run → test/tutorial001/run.sh test/tutorial002/expected → test/tutorial002/expected.out test/tutorial002/run → test/tutorial002/run.sh test/tutorial003/expected → test/tutorial003/expected.out test/tutorial003/run → test/tutorial003/run.sh test/tutorial004/expected → test/tutorial004/expected.out test/tutorial004/run → test/tutorial004/run.sh test/tutorial005/expected → test/tutorial005/expected.out test/tutorial005/run → test/tutorial005/run.sh test/tutorial006/expected → test/tutorial006/expected.out test/tutorial006/run → test/tutorial006/run.sh test/tutorial007/expected → test/tutorial007/expected.out test/tutorial007/run → test/tutorial007/run.sh test/unique001/expected → test/unique001/expected.out test/unique001/run → test/unique001/run.sh test/unique004/expected → test/unique004/expected.out test/unique004/run → test/unique004/run.sh test/universes001/expected → test/universes001/expected.out test/universes001/run → test/universes001/run.sh test/universes002/expected → test/universes002/expected.out test/universes002/run → test/universes002/run.sh test/views001/expected → test/views001/expected.out test/views001/run → test/views001/run.sh test/views002/expected → test/views002/expected.out test/views002/run → test/views002/run.sh test/views003/expected → test/views003/expected.out test/views003/run → test/views003/run.sh
.travis.yml+54−36
@@ -1,5 +1,4 @@
1−dist: trusty
2−sudo: false
1+dist: xenial
32
43language: c
54
@@ -9,35 +8,37 @@ env:
98
109matrix:
1110 include:
12− - env: CABALVER="2.2" GHCVER="8.6.5" STACKVER="14.15" STYLISH=YES
13− addons: {apt: {packages: [cabal-install-2.2,ghc-8.6.5,hscolour], sources: [hvr-ghc]}}
14− - env: CABALVER="2.2" GHCVER="7.10.3" TESTS="test_c"
15− compiler: ": #GHC 7.10.3"
16− addons: {apt: {packages: [cabal-install-2.2,ghc-7.10.3,cppcheck,hscolour], sources: [hvr-ghc]}}
17−# Disabled because it's always timing out
18−# - env: CABALVER="1.24" GHCVER="8.0.1" TESTS="test_c"
19−# compiler: ": #GHC 8.0.1"
20−# addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1,cppcheck,hscolour], sources: [hvr-ghc]}}
21− - env: CABALVER="2.0" GHCVER="8.2.2" TESTS="lib_doc doc"
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"
2214 compiler: ": #GHC 8.2.2"
23− addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
24− - env: CABALVER="2.0" GHCVER="8.2.2" TESTS="test_js"
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"
2517 compiler: ": #GHC 8.2.2"
26− addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
27− - env: CABALVER="2.0" GHCVER="8.2.2" TESTS="test_c"
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"
2820 compiler: ": #GHC 8.2.2"
29− addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
30−#TODO: The idris built with those fails due to libffi dynamic linking version mismatch.
31−# Caused by the GHC backport to Trusty?
32−# - env: CABALVER="2.2" GHCVER="8.4.1" TESTS="lib_doc doc"
33−# compiler: ": #GHC 8.4.1"
34−# addons: {apt: {packages: [cabal-install-2.2,ghc-8.4.1,cppcheck,hscolour], sources: [hvr-ghc]}}
35−# - env: CABALVER="2.2" GHCVER="8.4.1" TESTS="test_js"
36−# compiler: ": #GHC 8.4.1"
37−# addons: {apt: {packages: [cabal-install-2.2,ghc-8.4.1,cppcheck,hscolour], sources: [hvr-ghc]}}
38−# - env: CABALVER="2.2" GHCVER="8.4.1" TESTS="test_c"
39−# compiler: ": #GHC 8.4.1"
40−# addons: {apt: {packages: [cabal-install-2.2,ghc-8.4.1,cppcheck,hscolour], sources: [hvr-ghc]}}
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]}}
4142 fast-finish: true
4243
4344cache:
@@ -56,7 +57,7 @@ before_install:
5657 - unset CC
5758 - if [[ $TRAVIS_OS_NAME == 'linux' ]];
5859 then
59− export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.cabal/bin:$PATH;
60+ export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.cabal/bin:$HOME/opt/scheme/bin/:$PATH;
6061 export SED=sed;
6162 export ZCAT=zcat;
6263 fi
@@ -71,6 +72,21 @@ before_install:
7172 export PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig:$PKG_CONFIG_PATH;
7273 fi
7374 - 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
7490
7591install:
7692 - which cabal
@@ -88,7 +104,7 @@ install:
88104 # causing cabal's default configuration (jobs: $ncpus)
89105 # to run into the GHC #9221 bug which can result in longer build-times.
90106 - $SED -i -r 's/(^jobs:).*/\1 2/' $HOME/.cabal/config
91− - cabal install -f FFI --only-dependencies --enable-tests --dry -v > installplan.txt
107+ - cabal v1-install -f FFI --only-dependencies --enable-tests --dry -v > installplan.txt
92108 - $SED -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
93109 # check whether current requested install-plan matches cached package-db snapshot
94110 - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
@@ -101,7 +117,7 @@ install:
101117 echo "cabal build-cache MISS";
102118 rm -rf $HOME/.cabsnap;
103119 mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
104− cabal install -f FFI --only-dependencies --enable-tests;
120+ cabal v1-install -f FFI --only-dependencies --enable-tests;
105121 fi
106122 # snapshot package-db on cache miss
107123 - if [ ! -d $HOME/.cabsnap ];
@@ -112,28 +128,30 @@ install:
112128 cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
113129 fi
114130
131+
115132before_script:
116133 - ORIGINAL_DIR=$(pwd)
117− - cabal sdist
134+ - cabal v1-sdist
118135 - cd ..
119136 - tar -xf ${ORIGINAL_DIR}/dist/${PKGNAME}*.tar.gz
120137 - cd ${PKGNAME}*
121138script:
139+ - export LD_PRELOAD=/opt/ghc/${GHCVER}/lib/ghc-${GHCVER}/rts/libffi.so.7
122140###
123141 - echo 'Configure...' && echo -en 'travis_fold:start:script.configure\\r'
124− - cabal configure -f FFI -f CI --enable-tests
142+ - cabal v1-configure -f FFI -f CI --enable-tests
125143 - echo -en 'travis_fold:end:script.configure\\r'
126144###
127145 - echo 'Build...' && echo -en 'travis_fold:start:script.build\\r'
128− - cabal build
146+ - cabal v1-build
129147 - echo -en 'travis_fold:end:script.build\\r'
130148###
131149 - echo 'Copy...' && echo -en 'travis_fold:start:script.copy\\r'
132− - cabal copy
150+ - cabal v1-copy
133151 - echo -en 'travis_fold:end:script.copy\\r'
134152###
135153 - echo 'Register...' && echo -en 'travis_fold:start:script.register\\r'
136− - cabal register
154+ - cabal v1-register
137155 - echo -en 'travis_fold:end:script.register\\r'
138156###
139157 - echo 'Cppcheck...' && echo -en 'travis_fold:start:script.cppcheck\\r'
CHANGELOG.md+3
@@ -1,3 +1,6 @@
1+# New since last release
2++ Updated to work with GHC 8.8 and cabal 3.0
3+
14# New in 1.3.2
25+ Documentation added to proof section
36
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+5−5
@@ -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)
@@ -72,7 +72,7 @@ We do not want you wasting your time nor duplicating somebody's work!
7272
7373## Making Changes
7474
75−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/).
7676The steps are described below.
7777
7878### New contributors
@@ -175,8 +175,8 @@ To help increase the chance of your pull request being accepted:
175175* Idris FAQs: [Official](https://idris.readthedocs.io/en/latest/faq/faq.html); [Unofficial](https://github.com/idris-lang/Idris-dev/wiki/Unofficial-FAQ);
176176* [Idris Manual](https://github.com/idris-lang/Idris-dev/wiki/Manual);
177177* [Idris Tutorial](https://idris.readthedocs.io/en/latest/tutorial/index.html);
178−* [Idris News](http://www.idris-lang.org/news/);
179−* [other Idris docs](http://www.idris-lang.org/documentation/).
178+* [Idris News](https://www.idris-lang.org/news/);
179+* [other Idris docs](https://www.idris-lang.org/documentation/).
180180* [Using Pull Requests](https://help.github.com/articles/using-pull-requests)
181181* [General GitHub Documentation](https://help.github.com/).
182182
INSTALL.md+11−2
@@ -130,7 +130,8 @@ PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig stack build
130130## Issue with GHC on Ubuntu/Fedora
131131
132132There 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 is broken.
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+
134135See the following GHC issue page for more information:
135136
136137 <https://gitlab.haskell.org/ghc/ghc/issues/15397>
@@ -141,4 +142,12 @@ Specifically, one will see an error message along the lines of:
141142
142143> error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory
143144
144−We have supplied an alternative stack configuration file (`stack-alt.yaml`) that will use a version of GHC prior to the upstream issue being introduced.
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+4−4
@@ -30,15 +30,15 @@ stylize:
3030 ./stylize.sh
3131
3232test_c:
33− $(CABAL) test $(ARGS) --test-options \
33+ $(CABAL) v1-test $(ARGS) --test-options \
3434 "$(TEST-ARGS) --rerun-update +RTS -N$(TEST-JOBS) -RTS"
3535
3636test_js:
37− $(CABAL) test $(ARGS) --test-options \
37+ $(CABAL) v1-test $(ARGS) --test-options \
3838 "$(TEST-ARGS) --node --rerun-update +RTS -N$(TEST-JOBS) -RTS"
3939
4040test_update:
41− $(CABAL) test $(ARGS) --test-options \
41+ $(CABAL) v1-test $(ARGS) --test-options \
4242 "$(TEST-ARGS) --accept +RTS -N$(TEST-JOBS) -RTS"
4343
4444test_clean:
@@ -56,7 +56,7 @@ linecount:
5656
5757#Note: this doesn't yet link to Hackage properly
5858doc: dist/setup-config
59− $(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"
6060
6161lib_doc:
6262 $(MAKE) -C libs IDRIS=../../dist/build/idris/idris doc
README.md+7−4
@@ -4,11 +4,11 @@
44[![Appveyor build](https://ci.appveyor.com/api/projects/status/xi8yu81oy1134g7o/branch/master?svg=true)](https://ci.appveyor.com/project/idrislang/idris-dev)
55[![Documentation Status](https://readthedocs.org/projects/idris/badge/?version=latest)](https://readthedocs.org/projects/idris/?badge=latest)
66[![Hackage](https://img.shields.io/hackage/v/idris.svg)](https://hackage.haskell.org/package/idris)
7−[![Stackage LTS](http://stackage.org/package/idris/badge/lts)](http://stackage.org/lts/package/idris)
8−[![Stackage Nightly](http://stackage.org/package/idris/badge/nightly)](http://stackage.org/nightly/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)
99[![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)
1010
11−Idris (http://idris-lang.org/) is a general-purpose functional programming
11+Idris (https://idris-lang.org/) is a general-purpose functional programming
1212language with dependent types.
1313
1414## Installation Guides.
@@ -28,7 +28,7 @@ Idris has support for external code generators. Supplied with the distribution
2828is a C code generator to compile executables, and a JavaScript code generator
2929with support for node.js and browser JavaScript.
3030
31−More information about [code generators can be found on the wiki](http://idris.readthedocs.io/en/latest/reference/codegen.html).
31+More information about [code generators can be found on the wiki](https://idris.readthedocs.io/en/latest/reference/codegen.html).
3232
3333## More Information
3434
@@ -44,3 +44,6 @@ where some interesting projects are being hosted.
4444
4545For those interested in contributing to Idris directly we kindly ask that
4646prospective 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.
Setup.hs−33
@@ -215,36 +215,6 @@ idrisConfigure _ flags pkgdesc local = do
215215 autogenComponentModulesDir lbi _ = autogenModulesDir lbi
216216#endif
217217
218−idrisPreSDist args flags = do
219− let dir = S.fromFlag (S.sDistDirectory flags)
220− let verb = S.fromFlag (S.sDistVerbosity flags)
221− generateVersionModule verb "src" True
222− generateBuildFlagsModule verb "src" []
223− generateTargetModule verb "src" "./libs"
224− generateToolchainModule verb "src" Nothing
225− preSDist simpleUserHooks args flags
226−
227−idrisSDist sdist pkgDesc bi hooks flags = do
228− pkgDesc' <- addGitFiles pkgDesc
229− sdist pkgDesc' bi hooks flags
230− where
231− addGitFiles :: PackageDescription -> IO PackageDescription
232− addGitFiles pkgDesc = do
233− files <- gitFiles
234− return $ pkgDesc { extraSrcFiles = extraSrcFiles pkgDesc ++ files}
235− gitFiles :: IO [FilePath]
236− gitFiles = liftM lines (readProcess "git" ["ls-files"] "")
237−
238−idrisPostSDist args flags desc lbi = do
239− Control.Exception.catch (do let file = "src" </> "Version_idris" Px.<.> "hs"
240− let targetFile = "src" </> "Target_idris" Px.<.> "hs"
241− putStrLn $ "Removing generated modules:\n "
242− ++ file ++ "\n" ++ targetFile
243− removeFile file
244− removeFile targetFile)
245− (\e -> let e' = (e :: SomeException) in return ())
246− postSDist simpleUserHooks args flags desc lbi
247−
248218#if !(MIN_VERSION_Cabal(2,0,0))
249219rewriteFileEx :: Verbosity -> FilePath -> String -> IO ()
250220rewriteFileEx _ = rewriteFile
@@ -353,8 +323,5 @@ main = defaultMainWithHooks $ simpleUserHooks
353323 , postInst = \_ flags pkg local ->
354324 idrisInstall (S.fromFlag $ S.installVerbosity flags)
355325 NoCopyDest pkg local
356− , preSDist = idrisPreSDist
357− , sDistHook = idrisSDist (sDistHook simpleUserHooks)
358− , postSDist = idrisPostSDist
359326 , testHook = idrisTestHook
360327 }
appveyor.yml+3−3
@@ -1,17 +1,17 @@
11version: 1.0.{build}
22init:
33- ps: >-
4− choco install cabal --version=2.4.1.0 --no-progress
4+ choco install cabal --no-progress
55
66 mkdir C:\ghc
77
8− Invoke-WebRequest "http://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"
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"
99
1010 7z x C:\ghc\ghc.tar.xz -oC:\ghc
1111
1212 7z x C:\ghc\ghc.tar -oC:\ghc
1313
14− $env:PATH="$env:PATH;c:\ghc\ghc-8.4.3\bin;$HOME\AppData\Roaming\cabal\bin"
14+ $env:PATH="$env:PATH;c:\ghc\ghc-8.8.2\bin;$HOME\AppData\Roaming\cabal\bin"
1515
1616 cabal v1-update
1717
azure-pipelines.yml+1−1
@@ -68,7 +68,7 @@ jobs:
6868 choco install 7zip.portable -y --no-progress
6969 choco install msys2 -y --no-progress --params "/InstallDir=C:/msys64/"
7070 mkdir C:\ghc
71− Invoke-WebRequest "http://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"
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"
7272 7z x C:\ghc\ghc.tar.xz -oC:\ghc
7373 7z x C:\ghc\ghc.tar -oC:\ghc
7474 displayName: "Setting up environment"
benchmarks/pidigits/pidigits.idr+1−1
@@ -3,7 +3,7 @@ import Data.Vect
33
44{- Toy program that outputs the n first digits of Pi.
55
6− Inspired from http://www.haskell.org/haskellwiki/Shootout/Pidigits.
6+ Inspired from https://www.haskell.org/haskellwiki/Shootout/Pidigits.
77 The original ns and str lazy lists have been replaced by strict functions.
88
99 Memory usage seems to be excessive. One of the branches of str is tail recursive, and
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+9−2
@@ -51,7 +51,7 @@ master_doc = 'index'
5151
5252# General information about the project.
5353project = u'Idris'
54−copyright = u'2017, 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
@@ -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.
@@ -245,6 +251,7 @@ latex_elements = {
245251# Additional stuff for the LaTeX preamble.
246252'preamble': r'''
247253\usepackage{lmodern}
254+\usepackage{textalpha}
248255\usepackage[T1]{fontenc}
249256\usepackage[utf8x]{inputenc}
250257\usepackage{titlesec}
@@ -294,7 +301,7 @@ latex_elements = {
294301# (source start file, target name, title,
295302# author, documentclass [howto, manual, or own class]).
296303latex_documents = [
297− ('index', 'idris-documentation-complete.tex', u'Documentation for the Idris Language', u'The Idris Community', 'report'),
304+ # (master_doc, 'idris.tex', u'Documentation for the Idris Language', u'The Idris Community', 'report')
298305 ('tutorial/index', 'idris-tutorial.tex', u'The Idris Tutorial', u'The Idris Community', 'howto'),
299306]
300307
docs/effects/conclusions.rst+1−1
@@ -51,7 +51,7 @@ foundations are also well-studied see [5]_, [6]_, [7]_, [8]_.
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://link.springer.com/chapter/10.1007%2F978-3-642-10672-9_9
54+ https://link.springer.com/chapter/10.1007%2F978-3-642-10672-9_9
5555
5656
5757.. [4] Ohad Kammar, Sam Lindley, and Nicolas Oury. 2013. Handlers in
docs/effects/depeff.rst+16−7
@@ -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 => ())])
@@ -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/index.rst+1−1
@@ -25,7 +25,7 @@ A tutorial on the `Effects` package in `Idris`.
2525 Idris Community* has waived all copyright and related or neighbouring
2626 rights to Documentation for Idris.
2727
28− 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/
2929
3030.. toctree::
3131 :maxdepth: 1
docs/effects/introduction.rst+3−2
@@ -3,7 +3,7 @@ Introduction
33************
44
55Pure functional languages with dependent types such as `Idris
6−<http://www.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
docs/effects/summary.rst+23−23
@@ -43,16 +43,16 @@ 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
5757 Handler FileIO IO where { ... }
5858
@@ -69,9 +69,9 @@ 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
7676 Handler Random m where { ... }
7777
@@ -86,7 +86,7 @@ SELECT
8686
8787 SELECT : EFFECT
8888
89− select : List a -> Eff m a [SELECT]
89+ select : List a -> Eff a [SELECT]
9090
9191 Handler Selection Maybe where { ... }
9292 Handler Selection List where { ... }
@@ -102,10 +102,10 @@ 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
110110 Handler State m where { ... }
111111
@@ -121,12 +121,12 @@ 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
131131 Handler StdIO IO where { ... }
132132 Handler StdIO (IOExcept a) where { ... }
@@ -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
151151 Handler System IO where { ... }
152152 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+11−5
@@ -1,8 +1,8 @@
11.. _elaborator-reflection:
22
3−*********************
4−Elaborator Reflection
5−*********************
3+**********************************
4+Elaborator Reflection Introduction
5+**********************************
66
77The Idris elaborator is responsible for converting high-level Idris code into the core language.
88It 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.
@@ -198,6 +198,12 @@ This is primarily useful for code generation, particularly for generating patter
198198
199199Learn More
200200==========
201−While this documentation is still incomplete, elaboration reflection works in Idris today.
202−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.
203205All 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+2−2
@@ -37,7 +37,7 @@ Is there some documentation for the standard lib? List of functions?
3737=====================================================================
3838
3939API documentation for the shipped packages is listed on `the
40−documentation page <http://www.idris-lang.org/documentation/>`_.
40+documentation page <https://www.idris-lang.org/documentation/>`_.
4141
4242Unfortunately, the default prelude and shipped packages for `Idris`
4343are not necessarily complete with regards to documentation. Other
@@ -310,7 +310,7 @@ better and it will make sense to revisit this. For now, however, Idris will not
310310be offering arbitrary Unicode symbols in operators.
311311
312312This seems like an instance of `Wadler's
313−Law <http://www.haskell.org/haskellwiki/Wadler%27s_Law>`__ in action.
313+Law <https://www.haskell.org/haskellwiki/Wadler%27s_Law>`__ in action.
314314
315315This answer is based on Edwin Brady's response in the following
316316`pull request <https://github.com/idris-lang/Idris-dev/pull/694#issuecomment-29559291>`_.
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+1−1
@@ -3,7 +3,7 @@ Type Providers in Idris
33***********************
44
55`Type providers in Idris
6−<http://www.davidchristiansen.dk/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
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/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/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+3−1
@@ -13,7 +13,7 @@ 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
1919.. toctree::
@@ -24,5 +24,7 @@ Documentation for the Idris Language
2424 st/index
2525 effects/index
2626 proofs/index
27+ elaboratorReflection/index
28+ parserLibrary/index
2729 reference/index
2830 guides/index
docs/listing/idris-prompt-helloworld.txt+1−1
@@ -2,7 +2,7 @@ $ idris hello.idr
22 ____ __ _
33 / _/___/ /____(_)____
44 / // __ / ___/ / ___/ Version 1.3.2
5− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
5+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
66 /___/\__,_/_/ /_/____/ Type :? for help
77
88Type checking ./hello.idr
docs/listing/idris-prompt-interp.txt+1−1
@@ -2,7 +2,7 @@ $ idris interp.idr
22 ____ __ _
33 / _/___/ /____(_)____
44 / // __ / ___/ / ___/ Version 1.3.2
5− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
5+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
66 /___/\__,_/_/ /_/____/ Type :? for help
77
88Type checking ./interp.idr
docs/listing/idris-prompt-start.txt+1−1
@@ -2,7 +2,7 @@ $ idris
22 ____ __ _
33 / _/___/ /____(_)____
44 / // __ / ___/ / ___/ Version 1.3.2
5− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
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/parserLibrary/index.rstnew file+24
@@ -0,0 +1,24 @@
1+.. _parserLibrary:
2+
3+########################
4+Lexer and Parser Library
5+########################
6+
7+A tutorial on the lexer and parser library 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+ 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.rst+12−8
@@ -1,3 +1,7 @@
1+*******************
2+Background Material
3+*******************
4+
15In order to understand how to write proofs in Idris I think its worth clarifying some fundamentals, such as,
26
37- Propositions and judgments
@@ -95,11 +99,11 @@ So now that we can represent propositions as types other aspects of propositiona
9599+----------+-------------------+--------------------------+
96100| B | y=z | |
97101+----------+-------------------+--------------------------+
98−| and | A /\ B | Pair(x=y,y=z) |
102+| and | A /\\ B | ``Pair(x=y,y=z)`` |
99103+----------+-------------------+--------------------------+
100−| or | A \/ B | Either(x=y,y=z) |
104+| or | A \\/ B | ``Either(x=y,y=z)`` |
101105+----------+-------------------+--------------------------+
102−| implies | A -> B | (x=y) -> (y=x) |
106+| implies | A -> B | ``(x=y) -> (y=x)`` |
103107+----------+-------------------+--------------------------+
104108| for all | y=z | |
105109+----------+-------------------+--------------------------+
@@ -126,8 +130,8 @@ We can have a type which corresponds to disjunction:
126130.. code-block:: idris
127131
128132 data Or : Type -> Type -> Type where
129− OrIntroLeft : a -> A a b
130− OrIntroRight : b -> A a b
133+ OrIntroLeft : a -> A a b
134+ OrIntroRight : b -> A a b
131135
132136There is a built in type called 'Either'.
133137
@@ -202,7 +206,7 @@ In the following pages we discuss how to resolve propositionaly equalies.
202206Axiomatic and Constructive Approaches
203207=====================================
204208
205−How should we define types so that we can do proofs on them? In the natural numbers with plus example we could have started by treating it as a group based on the plus operator. So we have axioms:
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:
206210
207211- for all x,y : ``x+y=y+x``
208212- for all x: ``x + 0 = x = 0 + x``
@@ -215,13 +219,13 @@ These are axioms, that is a propositions/types that are asserted to be true with
215219
216220.. code-block:: idris
217221
218− commutePlus ``postulate``: x -> y -> plus x y = plus y x
222+ postulate commutePlus: (x:Nat) -> (y:Nat) -> plus x y = plus y x
219223
220224Alternatively 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.
221225
222226As we know, Idris uses both of these approaches with automatic coercion between them which gives the best of both worlds.
223227
224−So what can we learn from this to implement out own types:
228+So what can we learn from this to implement our own types:
225229
226230- Should we try to implement both approaches?
227231- Should we define our types by constructing up from primitive types?
docs/proofs/index.rst+2−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,7 +13,7 @@ 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
docs/proofs/interactive.rst+17−17
@@ -15,15 +15,15 @@ construct proofs as described on this page.
1515Elab and Pruviloj Libraries
1616===========================
1717
18−Elaborator reflection is defined in prelude/Language/Reflection/Elab.idr
19−and pruviloj is defined in Idris-dev/libs/pruviloj/
18+Elaborator reflection is defined in ``prelude/Language/Reflection/Elab.idr``
19+and ``pruviloj`` is defined in ``Idris-dev/libs/pruviloj/``.
2020
21−``Elab`` defines the basics such as: solve, attack, intro, compute,
22−rewriteWith and others.
21+``Elab`` defines the basics such as: ``solve``, ``attack``, ``intro``, ``compute``,
22+``rewriteWith`` and others.
2323``pruviloj`` defines some more advanced derived commands such as:
24−reflexivity and others.
24+``reflexivity`` and others.
2525
26−To use ``pruviloj`` call Idris with the "-p pruviloj" option and add:
26+To use ``pruviloj`` call Idris with the ``-p pruviloj`` option and add:
2727
2828.. code-block:: idris
2929
@@ -34,7 +34,7 @@ to the top of your file.
3434
3535It is useful to get the docs at the REPL by using the ``:doc`` command, and
3636search the docstrings using ``:apropos``. So to introduce the functions from
37−Elab and Pruviloj, that we will need for the following example, here are
37+``Elab`` and ``Pruviloj``, that we will need for the following example, here are
3838their docstrings:
3939
4040.. code-block:: idris
@@ -84,7 +84,7 @@ their docstrings:
8484 that the hole be immediately under its binder (use attack if it might
8585 not be).
8686
87−Here is the command from pruviloj that we will need for the example on
87+Here is the command from ``pruviloj`` that we will need for the example on
8888this page:
8989
9090.. code-block:: idris
@@ -129,18 +129,18 @@ On running , two global names are created, ``plusredZ_Z`` and
129129
130130 . / _/___/ /____(_)____
131131 / // __ / ___/ / ___/ Version 1.2.0
132− _/ // /_/ / / / (__ ) http://www.idris-lang.org/
132+ _/ // /_/ / / / (__ ) https://www.idris-lang.org/
133133 /___/\__,_/_/ /_/____/ Type :? for help
134134
135135 Idris is free software with ABSOLUTELY NO WARRANTY.
136136 For details type :warranty.
137137 Holes: Main.plusredZ_S, Main.plusredZ_Z
138138
139−This tells us that we have two holes Main.plusredZ_S and Main.plusredZ_Z. We can solve
139+This tells us that we have two holes ``Main.plusredZ_S`` and ``Main.plusredZ_Z``. We can solve
140140these separately, ``plusredZ_Z`` is the simplest so we will do that first.
141141
142142The ``:elab plusredZ_Z`` command enters interactive elaboration mode, which can be used to
143−complete the missing definition for plusredZ_Z.
143+complete the missing definition for ``plusredZ_Z``.
144144
145145.. code-block:: idris
146146
@@ -150,7 +150,7 @@ complete the missing definition for plusredZ_Z.
150150 {hole_0} : 0 = 0
151151
152152This 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:
153+is easy to prove by ``reflexivity`` from the ``pruviloj`` library:
154154
155155.. code-block:: idris
156156
@@ -190,7 +190,7 @@ accessible by pattern matching) and ``ih`` — the local variable
190190containing the result of the recursive call. We can introduce these as
191191assumptions using the ``intro`` tactic twice. The parameter is entered as
192192a constant of type ``TTName`` which is entered as a backtick with double
193−braces \`{{ih}}. This gives:
193+braces ```{{ih}}``. This gives:
194194
195195.. code-block:: idris
196196
@@ -223,11 +223,11 @@ like to use this knowledge to replace ``plus k 0`` in the goal with
223223 {hole_0} : S k = S k
224224
225225The ``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
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
228228``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:
229+so the ``Var`` constructor is used to make a variable. Here, it results in an equality
230+which is trivially provable using ``reflexivity``:
231231
232232.. code-block:: idris
233233
docs/proofs/pluscomm.rst+1−1
@@ -182,7 +182,7 @@ interface rather than using ``plus`` directly. They have the names
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.rst+27−22
@@ -1,19 +1,22 @@
1−This page attempts to explain some of the techniques used in Idris to prove propositional equalities.
2−
1+******************************
32Proving Propositional Equality
4−==============================
3+******************************
4+
5+This page attempts to explain some of the techniques used in Idris to prove propositional equalities.
56
6−We have seen that definitional equalities can be proved using Refl since they always normalise to unique values that can be compared directly.
7+We have seen that definitional equalities can be proved using ``Refl`` since they always normalise to unique values that can be compared directly.
78
8−However with propositional equalities we are using symbolic variables they do not always normalse.
9+However with propositional equalities we are using symbolic variables they do not always normalise.
910
1011So to take the previous example:
1112
12−plusReducesR : (n:Nat) -> plus n Z = n
13+.. code-block:: idris
14+
15+ plusReducesR : (n:Nat) -> plus n Z = n
1316
14−In this case 'plus n Z' does not normalise to n. Even though both sides are equal we cannot pattern match Refl.
17+In this case ``plus n Z`` does not normalise to ``n``. Even though both sides are equal we cannot pattern match ``Refl``.
1518
16−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.
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.
1720
1821So here:
1922
@@ -24,19 +27,21 @@ So here:
2427 plusReducesR {n = (S k)} = let rec = plus_commutes_Z {n=k} in
2528 rewrite rec in Refl
2629
27−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.
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.
2831
2932Replace
3033=======
3134
32−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:
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
3338
3439 if x=y
3540 then P x = P y
3641
37−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
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``.
3843
39−So if n is a natural number variable then P could be something like 2*n + 3.
44+So if ``n`` is a natural number variable then ``P`` could be something like ``2*n + 3``.
4045
4146To use this in our proofs there is the following function in the prelude:
4247
@@ -46,14 +51,14 @@ To use this in our proofs there is the following function in the prelude:
4651 replace : {a:_} -> {x:_} -> {y:_} -> {P : a -> Type} -> x = y -> P x -> P y
4752 replace Refl prf = prf
4853
49−Removing the implicits, if we supply an equality (x=y) and a proof of a property of x (P x) then we get a proof of a property of y (P y)
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``)
5055
5156.. code-block:: idris
5257
5358 > :t replace
5459 replace : (x = y) -> P x -> P y
5560
56−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.
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``.
5762
5863.. code-block:: idris
5964
@@ -66,16 +71,16 @@ So, in the following example, if we supply p1 x which is a proof that x=2 and th
6671Rewrite
6772=======
6873
69−Similar to 'replace' above but Idris provides a nicer syntax which makes 'rewrite' easier to use in examples like plusReducesR above.
74+Similar to ``replace`` above but Idris provides a nicer syntax which makes ``rewrite`` easier to use in examples like ``plusReducesR`` above.
7075
7176.. code-block:: idris
7277
7378 rewrite__impl : (P : a -> Type) -> x = y -> P y -> P x
7479 rewrite__impl p Refl prf = prf
7580
76−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).
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).
7782
78−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.
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``.
7984
8085.. code-block:: idris
8186
@@ -87,16 +92,16 @@ Example: again we supply p1 which is a proof that x=2 and the equality x=y then
8792
8893We can think of rewrite doing this:
8994
90− * Start with a equation x=y and a property P: x -> Type
91− * Searches y in P
92− * Replaces all occurrences of y with x in P.
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``.
9398
9499That is, we are doing a substitution.
95100
96101Symmetry and Transitivity
97102=========================
98103
99−In addition to 'reflexivity' equality also obeys 'symmetry' and 'transitivity' and these are also included in the prelude:
104+In addition to *reflexivity* equality also obeys *symmetry* and *transitivity* and these are also included in the prelude:
100105
101106.. code-block:: idris
102107
@@ -111,7 +116,7 @@ In addition to 'reflexivity' equality also obeys 'symmetry' and 'transitivity' a
111116Heterogeneous Equality
112117======================
113118
114−Also included in the prelude:
119+Also included in the prelude:
115120
116121.. code-block:: idris
117122
docs/reference/codegen.rst+6−4
@@ -1,3 +1,5 @@
1+.. _code-generation-targets:
2+
13************************
24Code Generation Targets
35************************
@@ -34,10 +36,10 @@ issue the following command:
3436 $ idris --codegen javascript hello.idr -o hello.js
3537
3638
37−Idris can produce very big chunks of JavaScript code (hello world
38−weighs in at 1500 lines). However, the generated code can be minified
39−using the `closure-compiler
40−<https://developers.google.com/closure/compiler/>`__ from Google.
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.
4143
4244::
4345
docs/reference/compilation.rst+15−15
@@ -54,7 +54,7 @@ by setting a verbosity level.
5454 Checking, and the individual steps prior to code generation.
5555
5656
57−By default Idris' progress reporting is set to quiet-``-q``, or ``--quiet``.
57+By default Idris' progress reporting is set to quiet: ``-q``, or ``--quiet``.
5858
5959Logging Internal Operation
6060===========================
@@ -100,32 +100,32 @@ Environment Variables
100100Several paths set by default within the Idris compiler can be
101101overridden through environment variables. The provided variables are:
102102
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.
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.
108108
109109.. note::
110110
111111 In versions of Idris prior to 0.12.3 the environment variables
112− `IDRIS_LIBRARY_PATH` and `TARGET` were both used to affect the
112+ ``IDRIS_LIBRARY_PATH`` and ``TARGET`` were both used to affect the
113113 installation of single packages and direct where Idris installed
114114 its data. The meaning of these variables has changed, and command
115115 line options are preferred when changing where individual packages
116116 are installed.
117117
118−The CLI option `--ibcsubdir` can be used to direct where generated IBC
118+The CLI option ``--ibcsubdir`` can be used to direct where generated IBC
119119files are placed. However, this means Idris will install files in a
120120non-standard location separate from the rest of the installed
121−packages. The CLI option `--idrispath <dir>` allows you to add a
121+packages. The CLI option ``--idrispath <dir>`` allows you to add a
122122directory 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
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
126126reserved flag.
127127
128128Further, 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.
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/erasure.rst+3−3
@@ -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
@@ -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+7−6
@@ -204,9 +204,10 @@ unable to pass the closed-over values through C. If we want to pass Idris values
204204to the callback we have to pass them through C explicitly. Non-primitive Idris
205205values can be passed to C via the ``Raw`` type.
206206
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 callback, change the return type
209−from IOr to r, and change the = do to = unsafePerformIO $ do).
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``).
210211
211212There are two special function names:
212213``%wrapper`` returns the function pointer that wraps an Idris function. This
@@ -258,7 +259,7 @@ useful to access constants that are preprocessor definitions (like ``INT_MAX``).
258259 main = print !intMax
259260
260261For more complicated interactions with C (such as reading and setting fields
261−of a C struct), there is a module CFFI available in the contrib package.
262+of a C ``struct``), there is a module C FFI available in the contrib package.
262263
263264C heap
264265------
@@ -371,7 +372,7 @@ Usage from C code
371372The ``Raw`` type constructor allows you to access or return a runtime
372373representation of the value. For instance, if you want to copy a string
373374generated from C code into an Idris value, you may want to return a
374−``Raw String``instead of a ``String`` and use ``MKSTR`` or ``MKSTRlen`` to
375+``Raw String`` instead of a ``String`` and use ``MKSTR`` or ``MKSTRlen`` to
375376copy it over.
376377
377378.. code-block:: idris
@@ -393,7 +394,7 @@ FFI implementation
393394------------------
394395
395396In order to write bindings to external libraries, the details of how
396−``foreign`` works are unnecessary --- you simply need to know that
397+``foreign`` works are unnecessary: you simply need to know that
397398``foreign`` takes an FFI descriptor, the function name, and its
398399type. It is instructive to look a little deeper, however:
399400
docs/reference/index.rst+1−2
@@ -14,7 +14,7 @@ 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::
@@ -36,7 +36,6 @@ This will tell you how Idris works, for using it you should read the Idris Tutor
3636 internals
3737 language-features
3838 language-extensions
39− elaborator-reflection
4039 type-directed-search
4140 partial-evaluation
4241 misc
docs/reference/internals.rst+31−28
@@ -10,8 +10,8 @@ free to contribute.
1010This document assumes that you are already familiar with Idris. It is
1111intended for those who want to work on the internals.
1212
13−People looking to develop new back ends may want to look at [[Idris back
14−end IRs\|Idris-back-end-IRs]]
13+People looking to develop new back ends may want to look at
14+:ref:`code-generation-targets`
1515
1616Core/TT.hs
1717==========
@@ -53,7 +53,7 @@ with ``SC`` and ``CaseAlt`` to get GHC to generate a function for
5353mapping over contained terms.
5454
5555Constructor cases (``ConCase`` in ``CaseAlt``) refer to numbered
56−constructors. Every constructor is numbered 0,1,2,…. At this stage in
56+constructors. Every constructor is numbered *0,1,2,…*. At this stage in
5757the compiler, the tags are datatype-local. After defunctionalization,
5858however, they are made globally unique.
5959
@@ -91,12 +91,12 @@ dictionary which makes totality checking easier.
9191The ``normalise*`` functions give different behaviors - but
9292``normalise`` is the most common.
9393
94−``normaliseC`` - "resolved" means with names converted to de Bruijn
95−indices as appropriate.
94+- ``normaliseC`` - "resolved" means with names converted to de Bruijn
95+ indices as appropriate;
9696
97−``normaliseAll`` - reduce everything, even if it's non-total
97+- ``normaliseAll`` - reduce everything, even if it's non-total;
9898
99−``normaliseTrace`` - special-purpose for debugging
99+- ``normaliseTrace`` - special-purpose for debugging.
100100
101101``simplify`` - reduce the things that are small - the list argument is
102102the things to not reduce.
@@ -110,8 +110,8 @@ Core/Elaborate.hs
110110=================
111111
112112Idris 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).
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).
115115
116116Lots of plumbing for errors.
117117
@@ -122,17 +122,17 @@ The string in the pair returned by elaborate is log information.
122122See JFP paper, but the names don't necessarily map to each other. The
123123paper is the "idealized version" without logging, additional state, etc.
124124
125−All the tactics take Raws, typechecking happens there.
125+All the tactics take ``Raw`` s, typechecking happens there.
126126
127−claim (x : t) assumes a new x : t.
127+``claim (x : t)`` assumes a new ``x : t``.
128128
129129PLEASE TIDY THINGS UP!
130130
131−proofSearch flag to try' is whether the failure came from a human (so
131+``proofSearch`` flag is to try whether the failure came from a human (so
132132fail) or from a machine (so continue)
133133
134−Idris-level syntax for providing alternatives explicitly: (\| x, y, z
135−\|) try x, y, z in order, and take the first that succeeds.
134+Idris-level syntax for providing alternatives explicitly: ``(| x, y, z
135+|)`` try ``x``, ``y``, ``z`` in order, and take the first that succeeds.
136136
137137Core/ProofState.hs
138138==================
@@ -140,37 +140,40 @@ Core/ProofState.hs
140140Core/Unify.hs
141141=============
142142
143−Deals with unification. Unification can reply with: - this works - this
144−can never work - this will work if these other unification problems work
145−out (eg unifying f x with 1)
143+Deals with unification. Unification can reply with:
146144
147−match\_unify: same thing as unification except it's just matching name
148−against name, term against term. x + y matches to 0 + y with x = 0. Used
149−for <== syntax as well as type class resolution.
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.
150153
151154Idris/AbsSyntaxTree.hs
152155======================
153156
154−PTerm is the datatype of Idris syntax. P is for Program. Each PTerm
155−turns into a TT term by applying a series of tactics.
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.
156159
157−IState is the major interpreter state. The global context is the
158−tt\_ctxt field.
160+``IState`` is the major interpreter state. The global context is the
161+``tt_ctxt`` field.
159162
160−Ctxt maps possibly ambiguous names to their referents.
163+``Ctxt`` maps possibly ambiguous names to their referents.
161164
162165Idris/ElabDecls.hs
163166==================
164167
165−This is where the actual elaboration from PTerm to TT happens.
168+This is where the actual elaboration from ``PTerm`` to ``TT`` happens.
166169
167170Idris/ElabTerm.hs
168171=================
169172
170−build is the function that creates a Raw. All the "junk" is to deal with
173+``build`` is the function that creates a ``Raw``. All the "junk" is to deal with
171174things like metavars and so forth. It has to remember what names are
172175still to be defined, and it doesn't yet know the type (filled in by
173176unificaiton later). Also case expressions have to turn into top-level
174177functions.
175178
176−resolveTC is type class resolution.
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/misc.rst+5−5
@@ -115,11 +115,11 @@ Here is an example:
115115 import Syntax.PreorderReasoning
116116 multThree : (a, b, c : Nat) -> a * b * c = c * a * b
117117 multThree a b c =
118− (a * b * c) ={ sym (multAssociative a b c) }=
119− (a * (b * c)) ={ cong (multCommutative b c) }=
120− (a * (c * b)) ={ multAssociative a c b }=
121− (a * c * b) ={ cong {f = (* b)} (multCommutative a c) }=
122− (c * a * b) QED
118+ (a * b * c) ={ sym (multAssociative a b c) }=
119+ (a * (b * c)) ={ cong (multCommutative b c) }=
120+ (a * (c * b)) ={ multAssociative a c b }=
121+ (a * c * b) ={ cong {f = (* b)} (multCommutative a c) }=
122+ (c * a * b) QED
123123
124124Note that the parentheses are required -- only a simple expression can
125125be on the left of ``={ }=`` or ``QED``. Also, when using preorder
docs/reference/partial-evaluation.rst+2−2
@@ -8,7 +8,7 @@ of functions with arguments annotated as ``%static``.
88
99(This is an implementation of the partial evaluator described in `this
1010ICFP 2010
11−paper <http://eb.host.cs.st-andrews.ac.uk/writings/icfp10.pdf>`__.
11+paper <https://eb.host.cs.st-andrews.ac.uk/writings/icfp10.pdf>`__.
1212Please refer to this for more precise definitions of what follows.)
1313
1414Partial evaluation is switched off by default since Idris 1.0. It can
@@ -207,7 +207,7 @@ Specialising Interpreters
207207A particularly useful situation where partial evaluation becomes
208208effective is in defining an interpreter for a well-typed expression
209209language, defined as follows (see the `Idris tutorial, section
210−4 <http://eb.host.cs.st-andrews.ac.uk/writings/idris-tutorial.pdf>`__
210+4 <https://eb.host.cs.st-andrews.ac.uk/writings/idris-tutorial.pdf>`__
211211for more details on how this works):
212212
213213::
docs/reference/type-directed-search.rst+1−1
@@ -4,7 +4,7 @@ Type Directed Search ``:search``
44
55Idris' ``:search`` command searches for terms according to their
66approximate type signature (much like
7−`Hoogle <http://www.haskell.org/hoogle/>`__ for Haskell). For
7+`Hoogle <https://www.haskell.org/hoogle/>`__ for Haskell). For
88example::
99
1010 Idris> :search e -> List e -> List e
docs/reference/uniqueness-types.rst+2−2
@@ -13,7 +13,7 @@ ideally while giving up as little high level conveniences as possible.
1313
1414They are inspired by linear types, `Uniqueness Types
1515<https://en.wikipedia.org/wiki/Uniqueness_type>`__ in the `Clean
16−<http://wiki.clean.cs.ru.nl/Clean>`__ programming language, and
16+<https://wiki.clean.cs.ru.nl/Clean>`__ programming language, and
1717ownership types and borrowed pointers in the `Rust
1818<https://www.rust-lang.org/>`__ programming language.
1919
@@ -199,7 +199,7 @@ return it in exactly the condition in which it was received!
199199The restriction is that when a ``Borrowed`` type is matched, any
200200pattern variables under the ``Read`` which have a unique type may not
201201be referred to at all on the right hand side (unless they are
202−themselves ``lent`` to another function).
202+themselves lent to another function).
203203
204204Uniqueness information is stored in the type, and in particular in
205205function types. Once we're in a unique context, any new function which
docs/st/index.rst+1−1
@@ -14,7 +14,7 @@ the `Control.ST` library in `Idris`.
1414 Idris Community* has waived all copyright and related or neighbouring
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.. toctree::
2020 :maxdepth: 1
docs/st/introduction.rst+1−1
@@ -3,7 +3,7 @@ Overview
33********
44
55Pure functional languages with dependent types such as `Idris
6−<http://www.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.
docs/tutorial/conclusions.rst+5−5
@@ -7,7 +7,7 @@ Further Reading
77Further information about Idris programming, and programming with
88dependent types in general, can be obtained from various sources:
99
10−- The Idris web site (http://www.idris-lang.org/) and by asking
10+- The Idris web site (https://www.idris-lang.org/) and by asking
1111 questions on the mailing list.
1212
1313- The IRC channel ``#idris``, on
@@ -25,7 +25,7 @@ dependent types in general, can be obtained from various sources:
2525 https://github.com/idris-lang/Idris-dev.
2626
2727- Existing projects on the ``Idris Hackers`` web space:
28− http://idris-hackers.github.io.
28+ https://idris-hackers.github.io.
2929
3030- Various papers (e.g. [1]_, [2]_, and [3]_). Although these mostly
3131 describe older versions of Idris.
@@ -36,14 +36,14 @@ dependent types in general, can be obtained from various sources:
3636 Aspects of Declarative Languages (PADL'12), Claudio Russo and
3737 Neng-Fa Zhou (Eds.). Springer-Verlag, Berlin, Heidelberg,
3838 242-257. DOI=10.1007/978-3-642-27694-1_18
39− http://dx.doi.org/10.1007/978-3-642-27694-1_18
39+ https://dx.doi.org/10.1007/978-3-642-27694-1_18
4040
4141.. [2] Edwin C. Brady. 2011. IDRIS ---: systems programming meets full
4242 dependent types. In Proceedings of the 5th ACM workshop on
4343 Programming languages meets program verification (PLPV
4444 '11). ACM, New York, NY, USA,
4545 43-54. DOI=10.1145/1929529.1929536
46− http://doi.acm.org/10.1145/1929529.1929536
46+ https://doi.acm.org/10.1145/1929529.1929536
4747
4848.. [3] Edwin C. Brady and Kevin Hammond. 2010. Scrapping your
4949 inefficient engine: using partial evaluation to improve
@@ -51,4 +51,4 @@ dependent types in general, can be obtained from various sources:
5151 15th ACM SIGPLAN international conference on Functional
5252 programming (ICFP '10). ACM, New York, NY, USA,
5353 297-308. DOI=10.1145/1863543.1863587
54− http://doi.acm.org/10.1145/1863543.1863587
54+ https://doi.acm.org/10.1145/1863543.1863587
docs/tutorial/index.rst+1−1
@@ -15,7 +15,7 @@ existing functional programming language such as Haskell or OCaml.
1515 Idris Community* has waived all copyright and related or neighboring
1616 rights to Documentation for Idris.
1717
18− More information concerning the CC0 can be found online at: http://creativecommons.org/publicdomain/zero/1.0/
18+ More information concerning the CC0 can be found online at: https://creativecommons.org/publicdomain/zero/1.0/
1919
2020
2121.. toctree::
docs/tutorial/introduction.rst+2−2
@@ -6,7 +6,7 @@ Introduction
66
77In conventional programming languages, there is a clear distinction
88between *types* and *values*. For example, in `Haskell
9−<http://www.haskell.org>`_, the following are types, representing
9+<https://www.haskell.org>`_, the following are types, representing
1010integers, characters, lists of characters, and lists of any value
1111respectively:
1212
@@ -49,7 +49,7 @@ Intended Audience
4949
5050This tutorial is intended as a brief introduction to the language, and
5151is aimed at readers already familiar with a functional language such
52−as `Haskell <http://www.haskell.org>`_ or `OCaml <http://ocaml.org>`_.
52+as `Haskell <https://www.haskell.org>`_ or `OCaml <https://ocaml.org>`_.
5353In particular, a certain amount of familiarity with Haskell syntax is
5454assumed, although most concepts will at least be explained
5555briefly. The reader is also assumed to have some interest in using
docs/tutorial/miscellany.rst+1−1
@@ -560,7 +560,7 @@ But what about the type of ``Type``? If we ask Idris it reports:
560560 Type : Type 1
561561
562562If ``Type`` were its own type, it would lead to an inconsistency due to
563−`Girard’s paradox <http://www.cs.cmu.edu/afs/cs.cmu.edu/user/kw/www/scans/girard72thesis.pdf>`_,
563+`Girard’s paradox <https://www.cs.cmu.edu/afs/cs.cmu.edu/user/kw/www/scans/girard72thesis.pdf>`_,
564564so internally there is a *hierarchy* of types (or *universes*):
565565
566566.. code-block:: idris
docs/tutorial/syntax.rst+3−3
@@ -196,16 +196,16 @@ syntax rule, we can even go as far as:
196196 Aspects of Declarative Languages (PADL'12), Claudio Russo and
197197 Neng-Fa Zhou (Eds.). Springer-Verlag, Berlin, Heidelberg,
198198 242-257. DOI=10.1007/978-3-642-27694-1_18
199− http://dx.doi.org/10.1007/978-3-642-27694-1_18
199+ https://dx.doi.org/10.1007/978-3-642-27694-1_18
200200
201201.. [2] Edwin C. Brady. 2011. IDRIS ---: systems programming meets full
202202 dependent types. In Proceedings of the 5th ACM workshop on
203203 Programming languages meets program verification (PLPV
204204 '11). ACM, New York, NY, USA,
205205 43-54. DOI=10.1145/1929529.1929536
206− http://doi.acm.org/10.1145/1929529.1929536
206+ https://doi.acm.org/10.1145/1929529.1929536
207207
208208.. [3] Edwin Brady and Kevin Hammond. 2010. Correct-by-Construction
209209 Concurrency: Using Dependent Types to Verify Implementations of
210210 Effectful Resource Usage Protocols. Fundam. Inf. 102, 2 (April
211− 2010), 145-176. http://dl.acm.org/citation.cfm?id=1883636
211+ 2010), 145-176. https://dl.acm.org/citation.cfm?id=1883636
idris-tutorial.pdf

Binary file not shown.

idris.cabal+103−49
@@ -1,10 +1,11 @@
1+Cabal-Version: 2.4
12Name: idris
23Version: 1.3.2
3−License: BSD3
4+License: BSD-3-Clause
45License-file: LICENSE
56Author: Edwin Brady
67Maintainer: Edwin Brady <eb@cs.st-andrews.ac.uk>
7−Homepage: http://www.idris-lang.org/
8+Homepage: https://www.idris-lang.org/
89Bug-reports: https://github.com/idris-lang/Idris-dev/issues
910
1011Stability: Beta
@@ -16,7 +17,7 @@ Description: Idris is a general purpose language with full dependent types.
1617 meaning that some aspects of a program's behaviour can be
1718 specified precisely in the type. The language is closely
1819 related to Epigram and Agda. There is a tutorial at
19− <http://www.idris-lang.org/documentation>.
20+ <https://www.idris-lang.org/documentation>.
2021 Features include:
2122 .
2223 * Full, first class, dependent types with dependent pattern matching
@@ -41,42 +42,25 @@ Description: Idris is a general purpose language with full dependent types.
4142 .
4243 * Hugs style interactive environment
4344
44−Cabal-Version: >= 1.22
45−
4645Build-type: Custom
4746
4847Tested-With: GHC == 7.10.3, GHC == 8.0.1
4948
49+-- NOTE: due to https://github.com/haskell/cabal/issues/6125 the use of ** is
50+-- heavily discouraged.
5051Data-files: idrisdoc/styles.css
51− jsrts/jsbn/jsbn-browser.js
52− jsrts/jsbn/jsbn-node.js
53− jsrts/Runtime-common.js
54− jsrts/Runtime-javascript.js
55− jsrts/Runtime-node.js
52+ jsrts/jsbn/*.js
53+ jsrts/*.js
5654 jsrts/jsbn/LICENSE
57− rts/arduino/idris_main.c
58− rts/idris_bitstring.c
59− rts/idris_bitstring.h
60− rts/idris_gc.c
61− rts/idris_gc.h
62− rts/idris_gmp.c
63− rts/idris_gmp.h
64− rts/idris_heap.c
65− rts/idris_heap.h
66− rts/idris_main.c
67− rts/idris_net.c
68− rts/idris_net.h
69− rts/idris_opts.c
70− rts/idris_opts.h
71− rts/idris_rts.c
72− rts/idris_rts.h
73− rts/idris_stats.c
74− rts/idris_stats.h
75− rts/idris_stdfgn.c
76− rts/idris_stdfgn.h
77− rts/mini-gmp.c
78− rts/mini-gmp.h
79− rts/libtest.c
55+ rts/Makefile
56+ rts/*.c
57+ rts/seL4/*.c
58+ rts/arduino/*.c
59+ rts/windows/*.c
60+ rts/windows/*.h
61+ rts/*.h
62+ rts/seL4/CMakeLists.txt
63+ rts/seL4/README.md
8064
8165Extra-doc-files:
8266 CHANGELOG.md
@@ -86,13 +70,75 @@ Extra-doc-files:
8670 README.md
8771 RELEASE-CHECKS.md
8872 idris-tutorial.pdf
73+ man/idris.1
8974 samples/effects/*.idr
9075 samples/misc/*.idr
91− samples/misc/*.lidr
9276 samples/tutorial/*.idr
77+ samples/ST/*.idr
78+ samples/ST/Graphics/*.idr
79+ samples/ST/Net/*.idr
80+ samples/misc/*.lidr
9381
9482-- extra-source-files is generated by Setup.hs using `git --ls-files`.
9583Extra-source-files:
84+ Makefile
85+ config.mk
86+ custom.mk-alldeps
87+ mkpkg.sh
88+ stack-shell.nix
89+ stack.yaml
90+ stylize.sh
91+ win-release.sh
92+
93+ benchmarks/*.pl
94+ benchmarks/fasta/*.idr
95+ benchmarks/fasta/*.ipkg
96+ benchmarks/pidigits/*.idr
97+ benchmarks/pidigits/*.ipkg
98+ benchmarks/quasigroups/*.idr
99+ benchmarks/quasigroups/*.ipkg
100+ benchmarks/trivial/*.idr
101+ benchmarks/trivial/*.ipkg
102+ benchmarks/quasigroups/board
103+
104+ icons/*.png
105+ icons/*.ico
106+ icons/*.rc
107+ icons/*.svg
108+ icons/*.xml
109+
110+ libs/**/*.idr
111+ libs/**/*.ipkg
112+ libs/**/*.txt
113+ libs/Makefile
114+ libs/base/Makefile
115+ libs/contrib/Makefile
116+ libs/effects/Makefile
117+ libs/prelude/Makefile
118+ libs/pruviloj/Makefile
119+
120+ scripts/generate-multi-ghc-travis-template
121+ scripts/runidris
122+ scripts/runidris-node
123+
124+ src/.ghci
125+
126+ test/*.md
127+ test/*.hs
128+ test/**/*.idr
129+ test/**/*.lidr
130+ test/**/*.ipkg
131+ test/**/*.out
132+ test/**/*.sh
133+ test/**/*.c
134+ test/**/*.h
135+ test/**/*.in
136+ test/**/*.txt
137+ test/**/*.js
138+ test/base001/Makefile
139+ test/ffi004/theOtherType
140+ test/ffi004/theType
141+ test/scripts/timeout
96142
97143source-repository head
98144 type: git
@@ -100,7 +146,7 @@ source-repository head
100146
101147custom-setup
102148 setup-depends:
103− Cabal >= 1.10 && <2.5,
149+ Cabal >= 2.4 && < 3.1,
104150 base >= 4 && <5,
105151 directory,
106152 filepath,
@@ -261,26 +307,29 @@ Library
261307 Util.Pretty
262308 , Util.Net
263309
264−
265−
266− -- Auto Generated
267310 , Paths_idris
268311 , Version_idris
269312 , Tools_idris
270313 , BuildFlags_idris
271314
315+ -- Auto Generated
316+ Autogen-modules: Paths_idris
317+ , Version_idris
318+ , Tools_idris
319+ , BuildFlags_idris
320+
272321 Build-depends: base >=4 && <5
273322 , aeson >= 0.6 && < 1.5
274323 , annotated-wl-pprint >= 0.7 && < 0.8
275− , ansi-terminal < 0.10
324+ , ansi-terminal < 0.11
276325 , ansi-wl-pprint < 0.7
277326 , array >= 0.4.0.1 && < 0.6
278327 , base64-bytestring < 1.1
279328 , binary >= 0.8.4.1 && < 0.9
280329 , blaze-html >= 0.6.1.3 && < 0.10
281− , blaze-markup >= 0.5.2.1 && < 0.9
330+ , blaze-markup >= 0.5.2.1 && < 0.10
282331 , bytestring < 0.11
283− , cheapskate >= 0.1.1 && < 0.2
332+ , cheapskate >= 0.1.1.2 && < 0.2
284333 , code-page >= 0.1 && < 0.3
285334 , containers >= 0.5 && < 0.7
286335 , deepseq < 1.5
@@ -289,10 +338,10 @@ Library
289338 , fingertree >= 0.1.4.1 && < 0.2
290339 , haskeline >= 0.7 && < 0.8
291340 , ieee754 >= 0.7 && < 0.9
292− , megaparsec >= 7.0.4 && < 8
341+ , megaparsec >= 7.0.4 && < 9
293342 , mtl >= 2.1 && < 2.3
294− , network >= 2.7 && < 2.9
295− , optparse-applicative >= 0.13 && < 0.15
343+ , network >= 2.7 && < 3.1.2
344+ , optparse-applicative >= 0.13 && < 0.16
296345 , parser-combinators >= 1.0.0
297346 , pretty < 1.2
298347 , process < 1.7
@@ -300,8 +349,8 @@ Library
300349 , safe >= 0.3.9
301350 , split < 0.3
302351 , terminal-size < 0.4
303− , text >=1.2.1.0 && < 1.3
304− , time >= 1.4 && < 1.9
352+ , text >=1.2.1.0 && < 1.4
353+ , time >= 1.4 && < 2.0
305354 , transformers >= 0.5 && < 0.6
306355 , uniplate >=1.6 && < 1.7
307356 , unordered-containers < 0.3
@@ -309,11 +358,12 @@ Library
309358 , vector < 0.13
310359 , vector-binary-instances < 0.3
311360 , zip-archive > 0.2.3.5 && < 0.5
312− , fsnotify >= 0.2 && < 2.2
361+ , fsnotify >= 0.2 && < 0.4
313362 , async < 2.3
314363
315364 if !impl(ghc >= 8.0)
316− Build-Depends: semigroups == 0.18.*
365+ Build-Depends: semigroups == 0.18.*
366+ , fail == 4.9.0.*
317367
318368 Default-Language: Haskell2010
319369 ghc-prof-options: -auto-all -caf-all
@@ -332,6 +382,7 @@ Library
332382 cpp-options: -DIDRIS_GMP
333383 if flag(freestanding)
334384 other-modules: Target_idris
385+ autogen-modules: Target_idris
335386 cpp-options: -DFREESTANDING
336387 if flag(CI)
337388 ghc-options: -Werror
@@ -365,7 +416,7 @@ Test-suite regression-and-feature-tests
365416 , filepath
366417 , directory
367418 , haskeline >= 0.7
368− , optparse-applicative >= 0.13 && < 0.15
419+ , optparse-applicative >= 0.13 && < 0.16
369420 , tagged
370421 , tasty >= 0.8
371422 , tasty-golden >= 2.0
@@ -380,6 +431,7 @@ Test-suite regression-and-feature-tests
380431
381432Executable idris-codegen-c
382433 Main-is: Main.hs
434+ autogen-modules: Paths_idris
383435 other-modules: Paths_idris
384436 hs-source-dirs: codegen/idris-codegen-c
385437
@@ -395,6 +447,7 @@ Executable idris-codegen-c
395447
396448Executable idris-codegen-javascript
397449 Main-is: Main.hs
450+ autogen-modules: Paths_idris
398451 other-modules: Paths_idris
399452 hs-source-dirs: codegen/idris-codegen-javascript
400453
@@ -410,6 +463,7 @@ Executable idris-codegen-javascript
410463
411464Executable idris-codegen-node
412465 Main-is: Main.hs
466+ autogen-modules: Paths_idris
413467 other-modules: Paths_idris
414468 hs-source-dirs: codegen/idris-codegen-node
415469
libs/base/Control/Isomorphism.idr+20−23
@@ -17,21 +17,22 @@ record Iso a b where
1717
1818-- Isomorphism properties
1919
20−||| Isomorphism is Reflexive
20+||| Isomorphism is reflexive
2121isoRefl : Iso a a
22−isoRefl = MkIso id id (\x => Refl) (\x => Refl)
22+isoRefl = MkIso id id (\_ => Refl) (\_ => Refl)
2323
2424||| Isomorphism is transitive
2525isoTrans : Iso a b -> Iso b c -> Iso a c
2626isoTrans (MkIso to from toFrom fromTo) (MkIso to' from' toFrom' fromTo') =
27− MkIso (\x => to' (to x))
28− (\y => from (from' y))
29− (\y => (to' (to (from (from' y)))) ={ cong (toFrom (from' y)) }=
30− (to' (from' y)) ={ toFrom' y }=
31− y QED)
32− (\x => (from (from' (to' (to x)))) ={ cong (fromTo' (to x)) }=
33− (from (to x)) ={ fromTo x }=
34− x QED)
27+ MkIso xto xfrom xtoFrom xfromTo where
28+ xto : a -> c
29+ xto = to' . to
30+ xfrom : c -> a
31+ xfrom = from . from'
32+ xtoFrom : (z : c) -> xto (xfrom z) = z
33+ xtoFrom z = rewrite toFrom $ from' z in toFrom' z
34+ xfromTo : (x : a) -> xfrom (xto x) = x
35+ xfromTo x = rewrite fromTo' (to x) in fromTo x
3536
3637Category Iso where
3738 id = isoRefl
@@ -99,8 +100,7 @@ eitherBotRight = isoTrans eitherComm eitherBotLeft
99100
100101||| Isomorphism is a congruence with regards to disjunction
101102eitherCong : Iso a a' -> Iso b b' -> Iso (Either a b) (Either a' b')
102−eitherCong {a = a} {a' = a'} {b = b} {b' = b'}
103− (MkIso to from toFrom fromTo)
103+eitherCong (MkIso to from toFrom fromTo)
104104 (MkIso to' from' toFrom' fromTo') =
105105 MkIso (eitherMap to to') (eitherMap from from') ok1 ok2
106106 where eitherMap : (c -> c') -> (d -> d') -> Either c d -> Either c' d'
@@ -143,9 +143,7 @@ pairAssoc = MkIso to from ok1 ok2
143143
144144||| Conjunction with truth is a no-op
145145pairUnitRight : Iso (a, ()) a
146−pairUnitRight = MkIso fst (\x => (x, ())) (\x => Refl) ok
147− where ok : (x : (a, ())) -> (fst x, ()) = x
148− ok (x, ()) = Refl
146+pairUnitRight = MkIso fst (\x => (x, ())) (\_ => Refl) (\(_, ()) => Refl)
149147
150148||| Conjunction with truth is a no-op
151149pairUnitLeft : Iso ((), a) a
@@ -161,8 +159,7 @@ pairBotRight = isoTrans pairComm pairBotLeft
161159
162160||| Isomorphism is a congruence with regards to conjunction
163161pairCong : Iso a a' -> Iso b b' -> Iso (a, b) (a', b')
164−pairCong {a = a} {a' = a'} {b = b} {b' = b'}
165− (MkIso to from toFrom fromTo)
162+pairCong (MkIso to from toFrom fromTo)
166163 (MkIso to' from' toFrom' fromTo') =
167164 MkIso to'' from'' iso1 iso2
168165 where to'' : (a, b) -> (a', b')
@@ -205,7 +202,7 @@ distribLeft = MkIso to from toFrom fromTo
205202
206203||| Products distribute over sums
207204distribRight : Iso (a, Either b c) (Either (a, b) (a, c))
208−distribRight {a} {b} {c} = (pairComm `isoTrans` distribLeft) `isoTrans` eitherCong pairComm pairComm
205+distribRight = (pairComm `isoTrans` distribLeft) `isoTrans` eitherCong pairComm pairComm
209206
210207
211208-- Enable preorder reasoning syntax over isomorphisms
@@ -222,7 +219,7 @@ step a iso1 iso2 = isoTrans iso1 iso2
222219-- Isomorphisms over Maybe
223220||| Isomorphism is a congruence with respect to Maybe
224221maybeCong : Iso a b -> Iso (Maybe a) (Maybe b)
225−maybeCong {a} {b} (MkIso to from toFrom fromTo) = MkIso (map to) (map from) ok1 ok2
222+maybeCong (MkIso to from toFrom fromTo) = MkIso (map to) (map from) ok1 ok2
226223 where ok1 : (y : Maybe b) -> map to (map from y) = y
227224 ok1 Nothing = Refl
228225 ok1 (Just x) = (Just (to (from x))) ={ cong (toFrom x) }= (Just x) QED
@@ -253,7 +250,7 @@ maybeVoidUnit = (Maybe Void) ={ maybeEither }=
253250 () QED
254251
255252eitherMaybeLeftMaybe : Iso (Either (Maybe a) b) (Maybe (Either a b))
256−eitherMaybeLeftMaybe {a} {b} =
253+eitherMaybeLeftMaybe =
257254 (Either (Maybe a) b) ={ eitherCongLeft maybeEither }=
258255 (Either (Either a ()) b) ={ eitherAssoc }=
259256 (Either a (Either () b)) ={ eitherCongRight eitherComm }=
@@ -263,7 +260,7 @@ eitherMaybeLeftMaybe {a} {b} =
263260
264261
265262eitherMaybeRightMaybe : Iso (Either a (Maybe b)) (Maybe (Either a b))
266−eitherMaybeRightMaybe {a} {b} =
263+eitherMaybeRightMaybe =
267264 (Either a (Maybe b)) ={ eitherComm }=
268265 (Either (Maybe b) a) ={ eitherMaybeLeftMaybe }=
269266 (Maybe (Either b a)) ={ maybeCong eitherComm }=
@@ -288,8 +285,8 @@ maybeIsoS = MkIso forth back fb bf
288285 fb (FS x) = Refl
289286
290287finZeroBot : Iso (Fin 0) Void
291−finZeroBot = MkIso (\x => void (uninhabited x))
292− (\x => void x)
288+finZeroBot = MkIso (void . uninhabited)
289+ void
293290 (\x => void x)
294291 (\x => void (uninhabited x))
295292
libs/base/Data/Fin.idr+9
@@ -65,6 +65,11 @@ weakenN : (n : Nat) -> Fin m -> Fin (m + n)
6565weakenN n FZ = FZ
6666weakenN n (FS f) = FS (weakenN n f)
6767
68+||| Weaken the bound on a Fin using an inequality proof
69+weakenLTE : LTE n m -> Fin n -> Fin m
70+weakenLTE (LTESucc p) FZ = FZ
71+weakenLTE (LTESucc p) (FS f) = FS $ weakenLTE p f
72+
6873||| Attempt to tighten the bound on a Fin.
6974||| Return `Left` if the bound could not be tightened, or `Right` if it could.
7075strengthen : Fin (S n) -> Either (Fin (S n)) (Fin n)
@@ -101,6 +106,10 @@ implementation MinBound (Fin (S n)) where
101106implementation MaxBound (Fin (S n)) where
102107 maxBound = last
103108
109+||| Add two Fins
110+addFin : (x : Fin n) -> (y : Fin m) -> Fin (finToNat x + m)
111+addFin FZ y = y
112+addFin (FS x) y = FS $ addFin x y
104113
105114-- Construct a Fin from an integer literal which must fit in the given Fin
106115
libs/base/Data/List/Quantifiers.idr+5
@@ -75,3 +75,8 @@ all d (x::xs) with (d x)
7575 case all d xs of
7676 Yes prf' => Yes (prf :: prf')
7777 No prf' => No (notAllThere prf')
78+
79+||| Given a proof of membership for some element, extract the property proof for it
80+indexAll : Elem x xs -> All p xs -> p x
81+indexAll Here (p::_ ) = p
82+indexAll (There e) ( _::ps) = indexAll e ps
libs/base/Data/So.idr+11−1
@@ -12,7 +12,7 @@ module Data.So
1212||| If you find yourself using `So` for something other than primitive types,
1313||| it may be appropriate to define a type of evidence for the property that you
1414||| care about instead.
15−data So : Bool -> Type where
15+data So : Bool -> Type where
1616 Oh : So True
1717
1818implementation Uninhabited (So False) where
@@ -23,4 +23,14 @@ choose : (b : Bool) -> Either (So b) (So (not b))
2323choose True = Left Oh
2424choose False = Right Oh
2525
26+||| Absurd when you have proof that both `b` and `not b` is true.
27+export
28+soAbsurd : So b -> So (not b) -> Void
29+soAbsurd sb snb with (sb)
30+ | Oh = uninhabited snb
31+
32+||| Transmission between usage of value-level `not` and type-level `Not`.
33+export
34+soNotToNotSo : So (not b) -> Not (So b)
35+soNotToNotSo = flip soAbsurd
2636
libs/contrib/Control/Algebra/Laws.idr+128−80
@@ -6,98 +6,146 @@ import Interfaces.Verified
66
77%access export
88
9−||| A prof that -0 = 0 in any verified group.
10−inverseNeutralIsNeutral : VerifiedGroup t => inverse (the t A.neutral) = A.neutral
9+||| -(-x) = x in any verified group.
10+inverseSquaredIsIdentity : VerifiedGroup t => (x : t) ->
11+ inverse (inverse x) = x
12+inverseSquaredIsIdentity x =
13+ let
14+ ix = inverse x
15+ iix = inverse ix
16+ in
17+ rewrite sym $ monoidNeutralIsNeutralR iix in
18+ rewrite sym $ groupInverseIsInverseL x in
19+ rewrite sym $ semigroupOpIsAssociative x ix iix in
20+ rewrite groupInverseIsInverseL ix in
21+ monoidNeutralIsNeutralL x
22+
23+||| -0 = 0 in any verified group.
24+inverseNeutralIsNeutral : VerifiedGroup t =>
25+ inverse (the t A.neutral) = A.neutral
1126inverseNeutralIsNeutral {t} =
12− let zero = the t neutral
13− step1 = cong {f = (<+> inverse zero)} (the (zero = zero) Refl)
14− step2 = replace {P = \x => zero <+> inverse zero = x} (groupInverseIsInverseL zero) step1
15− in
16− replace {P = \x => x = neutral} (monoidNeutralIsNeutralR $ inverse zero) step2
27+ let e = the t neutral in
28+ rewrite sym $ cong {f = inverse} (groupInverseIsInverseL e) in
29+ rewrite monoidNeutralIsNeutralR $ inverse e in
30+ inverseSquaredIsIdentity e
1731
18−||| A proof that -(-x) = x in any verified group.
19−inverseSquaredIsIdentity : VerifiedGroup t => (x : t) -> inverse (inverse x) = x
20−inverseSquaredIsIdentity {t} x =
21− let zero = the t neutral
22− step1 = cong {f = (x <+>)} (groupInverseIsInverseL (inverse x))
23− step2 = replace {P = \r => r = x <+> neutral} (semigroupOpIsAssociative x (inverse x) (inverse $ inverse x)) step1
24− step3 = replace {P = \r => r <+> inverse (inverse x) = x <+> neutral} (groupInverseIsInverseL x) step2
25− step4 = replace {P = \r => r = x <+> neutral} (monoidNeutralIsNeutralR (inverse $ inverse x)) step3
26− in
27− replace {P = \r => inverse (inverse x) = r} (monoidNeutralIsNeutralL x) step4
32+||| -(x + y) = -y + -x in any verified group.
33+inverseOfSum : VerifiedGroup t => (l, r : t) ->
34+ inverse (l <+> r) = inverse r <+> inverse l
35+inverseOfSum {t} l r =
36+ let
37+ e = the t neutral
38+ il = inverse l
39+ ir = inverse r
40+ sum = l <+> r
41+ ilr = inverse sum
42+ iril = ir <+> il
43+ ile = il <+> e
44+ in
45+ -- expand
46+ rewrite sym $ monoidNeutralIsNeutralR ilr in
47+ rewrite sym $ groupInverseIsInverseR r in
48+ rewrite sym $ monoidNeutralIsNeutralL ir in
49+ rewrite sym $ groupInverseIsInverseR l in
50+ -- shuffle
51+ rewrite semigroupOpIsAssociative ir il l in
52+ rewrite sym $ semigroupOpIsAssociative iril l r in
53+ rewrite sym $ semigroupOpIsAssociative iril sum ilr in
54+ -- contract
55+ rewrite sym $ monoidNeutralIsNeutralL il in
56+ rewrite groupInverseIsInverseL sum in
57+ rewrite sym $ semigroupOpIsAssociative (ir <+> ile) l ile in
58+ rewrite semigroupOpIsAssociative l il e in
59+ rewrite groupInverseIsInverseL l in
60+ rewrite monoidNeutralIsNeutralL e in
61+ Refl
2862
29−||| A proof that -(x + y) = -x - y in any verified abelian group.
30−inverseDistributesOverGroupOp : VerifiedAbelianGroup t => (l, r : t) -> inverse (l <+> r) = inverse l <+> inverse r
31−inverseDistributesOverGroupOp {t} l r =
32− let step1 = replace {P = \x => x = neutral} (sym $ groupInverseIsInverseL (l <+> r)) $ the (the t neutral = neutral) Refl
33− step2 = cong {f = ((inverse r) <+>) . ((inverse l) <+>)} step1
34− step3 = replace {P = \x => inverse r <+> (inverse l <+> (l <+> r <+> inverse (l <+> r))) = inverse r <+> x} (monoidNeutralIsNeutralL (inverse l)) step2
35− step4 = replace {P = \x => x = inverse r <+> inverse l} (semigroupOpIsAssociative (inverse r) (inverse l) (l <+> r <+> inverse (l <+> r))) step3
36− step5 = replace {P = \x => x = inverse r <+> inverse l} (semigroupOpIsAssociative (inverse r <+> inverse l) (l <+> r) (inverse (l <+> r))) step4
37− step6 = replace {P = \x => x <+> inverse (l <+> r) = inverse r <+> inverse l} (semigroupOpIsAssociative (inverse r <+> inverse l) l r) step5
38− step7 = replace {P = \x => x <+> r <+> inverse (l <+> r) = inverse r <+> inverse l} (sym $ semigroupOpIsAssociative (inverse r) (inverse l) l) step6
39− step8 = replace {P = \x => inverse r <+> x <+> r <+> inverse (l <+> r) = inverse r <+> inverse l} (groupInverseIsInverseR l) step7
40− step9 = replace {P = \x => x <+> r <+> inverse (l <+> r) = inverse r <+> inverse l} (monoidNeutralIsNeutralL (inverse r)) step8
41− step10 = replace {P = \x => x <+> inverse (l <+> r) = inverse r <+> inverse l} (groupInverseIsInverseR r) step9
42− step11 = replace {P = \x => x = inverse r <+> inverse l} (monoidNeutralIsNeutralR (inverse (l <+> r))) step10
43− in
44− replace {P = \x => inverse (l <+> r) = x} (abelianGroupOpIsCommutative (inverse r) (inverse l)) step11
63+||| -(x + y) = -x + -y in any verified abelian group.
64+inverseDistributesOverGroupOp : VerifiedAbelianGroup t => (l, r : t) ->
65+ inverse (l <+> r) = inverse l <+> inverse r
66+inverseDistributesOverGroupOp l r =
67+ rewrite abelianGroupOpIsCommutative (inverse l) (inverse r) in
68+ inverseOfSum l r
4569
46−||| A proof that anything multiplied by zero yields zero back.
47−multNeutralAbsorbingL : VerifiedRingWithUnity t => (r : t) -> A.neutral <.> r = A.neutral
48−multNeutralAbsorbingL r =
49− let step1 = the (unity <.> r = r) (ringWithUnityIsUnityR r)
50− step2 = replace {P = \x => x <.> r = r} (sym $ monoidNeutralIsNeutralR unity) step1
51− step3 = replace {P = \x => x = r} (ringOpIsDistributiveR neutral unity r) step2
52− step4 = replace {P = \x => neutral <.> r <+> x = r} (ringWithUnityIsUnityR r) step3
53− step5 = cong {f = \x => x <+> inverse r} step4
54− step6 = replace {P = \x => x = r <+> inverse r} (sym $ semigroupOpIsAssociative (neutral <.> r) r (inverse r)) step5
55− step7 = replace {P = \x => neutral <.> r <+> x = x} (groupInverseIsInverseL r) step6
56− in
57− replace {P = \x => x = neutral} (monoidNeutralIsNeutralL (neutral <.> r)) step7
70+||| Anything multiplied by zero yields zero back in a verified ring.
71+multNeutralAbsorbingL : VerifiedRing t => (r : t) ->
72+ A.neutral <.> r = A.neutral
73+multNeutralAbsorbingL {t} r =
74+ let
75+ e = the t neutral
76+ ir = inverse r
77+ exr = e <.> r
78+ iexr = inverse exr
79+ in
80+ rewrite sym $ monoidNeutralIsNeutralR exr in
81+ rewrite sym $ groupInverseIsInverseR exr in
82+ rewrite sym $ semigroupOpIsAssociative iexr exr ((iexr <+> exr) <.> r) in
83+ rewrite groupInverseIsInverseR exr in
84+ rewrite sym $ ringOpIsDistributiveR e e r in
85+ rewrite monoidNeutralIsNeutralR e in
86+ groupInverseIsInverseR exr
5887
59−||| A proof that anything multiplied by zero yields zero back.
60−multNeutralAbsorbingR : VerifiedRingWithUnity t => (l : t) -> l <.> A.neutral = A.neutral
61−multNeutralAbsorbingR l =
62− let step1 = the (l <.> unity = l) (ringWithUnityIsUnityL l)
63− step2 = replace {P = \x => l <.> x = l} (sym $ monoidNeutralIsNeutralR unity) step1
64− step3 = replace {P = \x => x = l} (ringOpIsDistributiveL l neutral unity) step2
65− step4 = replace {P = \x => l <.> neutral <+> x = l} (ringWithUnityIsUnityL l) step3
66− step5 = cong {f = \x => x <+> inverse l} step4
67− step6 = replace {P = \x => x = l <+> inverse l} (sym $ semigroupOpIsAssociative (l <.> neutral) l (inverse l)) step5
68− step7 = replace {P = \x => l <.> neutral <+> x = x} (groupInverseIsInverseL l) step6
69− in
70− replace {P = \x => x = neutral} (monoidNeutralIsNeutralL (l <.> neutral)) step7
88+||| Anything multiplied by zero yields zero back in a verified ring.
89+multNeutralAbsorbingR : VerifiedRing t => (l : t) ->
90+ l <.> A.neutral = A.neutral
91+multNeutralAbsorbingR {t} l =
92+ let
93+ e = the t neutral
94+ il = inverse l
95+ lxe = l <.> e
96+ ilxe = inverse lxe
97+ in
98+ rewrite sym $ monoidNeutralIsNeutralL lxe in
99+ rewrite sym $ groupInverseIsInverseL lxe in
100+ rewrite semigroupOpIsAssociative (l <.> (lxe <+> ilxe)) lxe ilxe in
101+ rewrite groupInverseIsInverseL lxe in
102+ rewrite sym $ ringOpIsDistributiveL l e e in
103+ rewrite monoidNeutralIsNeutralL e in
104+ groupInverseIsInverseL lxe
71105
72−||| A proof that inverse operator can be extracted before multiplication
106+||| Inverse operator can be extracted before multiplication.
73107||| (-x)y = -(xy)
74−multInverseInversesL : VerifiedRingWithUnity t => (l, r : t) -> inverse l <.> r = inverse (l <.> r)
108+multInverseInversesL : VerifiedRing t => (l, r : t) ->
109+ inverse l <.> r = inverse (l <.> r)
75110multInverseInversesL l r =
76− let step1 = replace {P = \x => x <.> r = neutral} (sym $ groupInverseIsInverseL l) (multNeutralAbsorbingL r)
77− step2 = replace {P = \x => x = neutral} (ringOpIsDistributiveR l (inverse l) r) step1
78− step3 = cong {f = ((inverse (l <.> r)) <+>)} step2
79− step4 = replace {P = \x => inverse (l <.> r) <+> (l <.> r <+> inverse l <.> r) = x} (monoidNeutralIsNeutralL (inverse (l <.> r))) step3
80− step5 = replace {P = \x => x = inverse (l <.> r)} (semigroupOpIsAssociative (inverse (l <.> r)) (l <.> r) (inverse l <.> r)) step4
81− step6 = replace {P = \x => x <+> inverse l <.> r = inverse (l <.> r)} (groupInverseIsInverseR (l <.> r)) step5
82− in
83− replace {P = \x => x = inverse (l <.> r)} (monoidNeutralIsNeutralR (inverse l <.> r)) step6
111+ let
112+ il = inverse l
113+ lxr = l <.> r
114+ ilxr = il <.> r
115+ i_lxr = inverse lxr
116+ in
117+ rewrite sym $ monoidNeutralIsNeutralR ilxr in
118+ rewrite sym $ groupInverseIsInverseR lxr in
119+ rewrite sym $ semigroupOpIsAssociative i_lxr lxr ilxr in
120+ rewrite sym $ ringOpIsDistributiveR l il r in
121+ rewrite groupInverseIsInverseL l in
122+ rewrite multNeutralAbsorbingL r in
123+ monoidNeutralIsNeutralL i_lxr
84124
85−||| A proof that inverse operator can be extracted before multiplication
125+||| Inverse operator can be extracted before multiplication.
86126||| x(-y) = -(xy)
87−multInverseInversesR : VerifiedRingWithUnity t => (l, r : t) -> l <.> inverse r = inverse (l <.> r)
127+multInverseInversesR : VerifiedRing t => (l, r : t) ->
128+ l <.> inverse r = inverse (l <.> r)
88129multInverseInversesR l r =
89− let step1 = replace {P = \x => l <.> x = neutral} (sym $ groupInverseIsInverseL r) (multNeutralAbsorbingR l)
90− step2 = replace {P = \x => x = neutral} (ringOpIsDistributiveL l r (inverse r)) step1
91− step3 = cong {f = ((inverse (l <.> r)) <+>)} step2
92− step4 = replace {P = \x => inverse (l <.> r) <+> (l <.> r <+> l <.> inverse r) = x} (monoidNeutralIsNeutralL (inverse (l <.> r))) step3
93− step5 = replace {P = \x => x = inverse (l <.> r)} (semigroupOpIsAssociative (inverse (l <.> r)) (l <.> r) (l <.> inverse r)) step4
94− step6 = replace {P = \x => x <+> l <.> inverse r = inverse (l <.> r)} (groupInverseIsInverseR (l <.> r)) step5
95− in
96− replace {P = \x => x = inverse (l <.> r)} (monoidNeutralIsNeutralR (l <.> inverse r)) step6
130+ let
131+ ir = inverse r
132+ lxr = l <.> r
133+ lxir = l <.> ir
134+ ilxr = inverse lxr
135+ in
136+ rewrite sym $ monoidNeutralIsNeutralL lxir in
137+ rewrite sym $ groupInverseIsInverseL lxr in
138+ rewrite semigroupOpIsAssociative lxir lxr ilxr in
139+ rewrite sym $ ringOpIsDistributiveL l ir r in
140+ rewrite groupInverseIsInverseR r in
141+ rewrite multNeutralAbsorbingR l in
142+ monoidNeutralIsNeutralR ilxr
97143
98−||| A proof that multiplication of inverses is the same as multiplication of original
99−||| elements. (-x)(-y) = xy
100−multNegativeByNegativeIsPositive : VerifiedRingWithUnity t => (l, r : t) -> inverse l <.> inverse r = l <.> r
144+||| Multiplication of inverses is the same as multiplication of
145+||| original elements.
146+||| (-x)(-y) = xy
147+multNegativeByNegativeIsPositive : VerifiedRing t => (l, r : t) ->
148+ inverse l <.> inverse r = l <.> r
101149multNegativeByNegativeIsPositive l r =
102150 rewrite multInverseInversesR (inverse l) r in
103151 rewrite sym $ multInverseInversesL (inverse l) r in
libs/contrib/Data/Combinators.idr+2−2
@@ -26,13 +26,13 @@ infixl 9 ...
2626(...) = (.) . (.)
2727
2828||| Warbler, as named in "To Mock a Mockingbird".
29−||| See http://code.jsoftware.com/wiki/Vocabulary/tilde
29+||| See https://code.jsoftware.com/wiki/Vocabulary/tilde
3030||| Equivalent to `join` on the Reader monad (`(->) e` in Haskell)
3131reflex : (a -> a -> b) -> (a -> b)
3232reflex f x = f x x
3333
3434||| Phoenix, according to Data.Aviary.
35−||| See http://code.jsoftware.com/wiki/Vocabulary/fork.
35+||| See https://code.jsoftware.com/wiki/Vocabulary/fork.
3636||| Equivalent to `liftA2` on the Reader monad (`(->) e` in Haskell)
3737fork2 : (b -> c -> d) -> (a -> b) -> (a -> c) -> (a -> d)
3838fork2 f g h x = f (g x) (h x)
libs/contrib/Data/List/Extra.idrdeleted−46
@@ -1,46 +0,0 @@
1−module Data.List.Extra
2−
3−%default total
4−%access export
5−
6−||| The final segment of the accumulator is the final segment of the result.
7−reverseOntoAcc : (xs, ys, zs : List a) ->
8− reverseOnto (ys ++ zs) xs = (reverseOnto ys xs) ++ zs
9−reverseOntoAcc [] _ _ = Refl
10−reverseOntoAcc (x :: xs) (ys) (zs) = reverseOntoAcc xs (x :: ys) zs
11−
12−||| Serves as a specification for reverseOnto.
13−reverseOntoSpec : (xs, ys : List a) -> reverseOnto xs ys = reverse ys ++ xs
14−reverseOntoSpec xs ys = reverseOntoAcc ys [] xs
15−
16−||| The reverse of an empty list is an empty list. Together with reverseCons,
17−||| serves as a specification for reverse.
18−reverseNil : reverse [] = []
19−reverseNil = Refl
20−
21−||| The reverse of a cons is the reverse of the tail followed by the head.
22−||| Together with reverseNil serves as a specification for reverse.
23−reverseCons : (x : a) -> (xs : List a) -> reverse (x::xs) = reverse xs ++ [x]
24−reverseCons x xs = reverseOntoSpec [x] xs
25−
26−||| Reversing an append is appending reversals backwards.
27−reverseAppend : (xs, ys : List a) ->
28− reverse (xs ++ ys) = reverse ys ++ reverse xs
29−reverseAppend [] ys = sym (appendNilRightNeutral (reverse ys))
30−reverseAppend (x :: xs) ys =
31− rewrite reverseCons x (xs ++ ys) in
32− rewrite reverseAppend xs ys in
33− rewrite reverseCons x xs in
34− sym $ appendAssociative (reverse ys) (reverse xs) [x]
35−
36−||| Reversing a singleton list is a no-op.
37−reverseSingletonId : (x : a) -> reverse [x] = [x]
38−reverseSingletonId _ = Refl
39−
40−||| Reversing a reverse gives the original.
41−reverseReverseId : (xs : List a) -> reverse (reverse xs) = xs
42−reverseReverseId [] = Refl
43−reverseReverseId (x :: xs) =
44− rewrite reverseCons x xs in
45− rewrite reverseAppend (reverse xs) [x] in
46− cong $ reverseReverseId xs
libs/contrib/Data/List/Reverse.idrnew file+99
@@ -0,0 +1,99 @@
1+||| Properties of the reverse function.
2+module Data.List.Reverse
3+
4+%default total
5+%access export
6+
7+||| The final segment of the accumulator is the final segment of the result.
8+reverseOntoAcc : (xs, ys, zs : List a) ->
9+ reverseOnto (ys ++ zs) xs = (reverseOnto ys xs) ++ zs
10+reverseOntoAcc [] _ _ = Refl
11+reverseOntoAcc (x :: xs) (ys) (zs) = reverseOntoAcc xs (x :: ys) zs
12+
13+||| Serves as a specification for reverseOnto.
14+reverseOntoSpec : (xs, ys : List a) -> reverseOnto xs ys = reverse ys ++ xs
15+reverseOntoSpec xs ys = reverseOntoAcc ys [] xs
16+
17+||| The reverse of an empty list is an empty list. Together with reverseCons,
18+||| serves as a specification for reverse.
19+reverseNil : reverse [] = []
20+reverseNil = Refl
21+
22+||| The reverse of a cons is the reverse of the tail followed by the head.
23+||| Together with reverseNil serves as a specification for reverse.
24+reverseCons : (x : a) -> (xs : List a) -> reverse (x::xs) = reverse xs ++ [x]
25+reverseCons x xs = reverseOntoSpec [x] xs
26+
27+||| Reversing an append is appending reversals backwards.
28+reverseAppend : (xs, ys : List a) ->
29+ reverse (xs ++ ys) = reverse ys ++ reverse xs
30+reverseAppend [] ys = sym (appendNilRightNeutral (reverse ys))
31+reverseAppend (x :: xs) ys =
32+ rewrite reverseCons x (xs ++ ys) in
33+ rewrite reverseAppend xs ys in
34+ rewrite reverseCons x xs in
35+ sym $ appendAssociative (reverse ys) (reverse xs) [x]
36+
37+||| A recursive definition of reverse.
38+reverseRec : List a -> List a
39+reverseRec [] = []
40+reverseRec (x :: xs) = reverseRec xs ++ [x]
41+
42+||| The iterative and recursive defintions of reverse are the same.
43+reverseEquiv : (xs : List a) -> reverseRec xs = reverse xs
44+reverseEquiv [] = Refl
45+reverseEquiv (x :: xs) =
46+ rewrite reverseEquiv xs in
47+ rewrite reverseAppend [x] xs in
48+ Refl
49+
50+||| Reversing a singleton list is a no-op.
51+reverseSingletonId : (x : a) -> reverse [x] = [x]
52+reverseSingletonId _ = Refl
53+
54+||| Reversing a reverse gives the original.
55+reverseReverseId : (xs : List a) -> reverse (reverse xs) = xs
56+reverseReverseId [] = Refl
57+reverseReverseId (x :: xs) =
58+ rewrite reverseCons x xs in
59+ rewrite reverseAppend (reverse xs) [x] in
60+ cong $ reverseReverseId xs
61+
62+||| Reversing onto preserves list length.
63+reverseOntoLength : (xs, acc : List a) ->
64+ length $ reverseOnto acc xs = length acc + length xs
65+reverseOntoLength [] acc = rewrite plusZeroRightNeutral (length acc) in Refl
66+reverseOntoLength (x :: xs) acc =
67+ rewrite reverseOntoLength xs (x :: acc) in
68+ plusSuccRightSucc (length acc) (length xs)
69+
70+||| Reversing preserves list length.
71+reverseLength : (xs : List a) -> length $ reverse xs = length xs
72+reverseLength xs = reverseOntoLength xs []
73+
74+||| Equal reversed lists are equal.
75+reverseEqual : (xs, ys : List a) -> reverse xs = reverse ys -> xs = ys
76+reverseEqual xs ys prf =
77+ rewrite sym $ reverseReverseId xs in
78+ rewrite prf in
79+ reverseReverseId ys
80+
81+||| Do geese see God?
82+data Palindrome : (xs : List a) -> Type where
83+ Empty : Palindrome []
84+ Single : Palindrome [_]
85+ Multi : Palindrome xs -> Palindrome $ [x] ++ xs ++ [x]
86+
87+||| A Palindrome reversed is itself.
88+palindromeReverse : (xs : List a) -> Palindrome xs -> reverse xs = xs
89+palindromeReverse [] Empty = Refl
90+palindromeReverse [_] Single = Refl
91+palindromeReverse ([x] ++ ys ++ [x]) (Multi pf) =
92+ rewrite reverseAppend ([x] ++ ys) [x] in
93+ rewrite reverseAppend [x] ys in
94+ rewrite palindromeReverse ys pf in
95+ Refl
96+
97+||| Only Palindromes are equal to their own reverse.
98+postulate -- This is a tough one. Any takers?
99+reversePalindrome : (xs : List a) -> reverse xs = xs -> Palindrome xs
libs/contrib/Data/Nat/Fact.idrnew file+56
@@ -0,0 +1,56 @@
1+||| Properties of factorial functions.
2+module Data.Nat.Fact
3+
4+%access public export
5+
6+%default total
7+
8+||| Recursive definition of factorial.
9+factRec : Nat -> Nat
10+factRec Z = 1
11+factRec (S k) = (S k) * factRec k
12+
13+||| Tail-recursive accumulator for factItr.
14+factAcc : Nat -> Nat -> Nat
15+factAcc Z acc = acc
16+factAcc (S k) acc = factAcc k $ (S k) * acc
17+
18+||| Iterative definition of factorial.
19+factItr : Nat -> Nat
20+factItr n = factAcc n 1
21+
22+----------------------------------------
23+
24+||| Multiplicand-shuffling lemma.
25+multShuffle : (a, b, c : Nat) -> a * (b * c) = b * (a * c)
26+multShuffle a b c =
27+ rewrite multAssociative a b c in
28+ rewrite multCommutative a b in
29+ sym $ multAssociative b a c
30+
31+||| Multiplication of the accumulator.
32+factAccMult : (a, b, c : Nat) ->
33+ a * factAcc b c = factAcc b (a * c)
34+factAccMult _ Z _ = Refl
35+factAccMult a (S k) c =
36+ rewrite factAccMult a k (S k * c) in
37+ rewrite multShuffle a (S k) c in
38+ Refl
39+
40+||| Addition of accumulators.
41+factAccPlus : (a, b, c : Nat) ->
42+ factAcc a b + factAcc a c = factAcc a (b + c)
43+factAccPlus Z _ _ = Refl
44+factAccPlus (S k) b c =
45+ rewrite factAccPlus k (S k * b) (S k * c) in
46+ rewrite sym $ multDistributesOverPlusRight (S k) b c in
47+ Refl
48+
49+||| The recursive and iterative definitions are the equivalent.
50+factRecItr : (n : Nat) -> factRec n = factItr n
51+factRecItr Z = Refl
52+factRecItr (S k) =
53+ rewrite factRecItr k in
54+ rewrite factAccMult k k 1 in
55+ rewrite multOneRightNeutral k in
56+ factAccPlus k 1 k
libs/contrib/Data/Nat/Parity.idr+155−29
@@ -2,18 +2,9 @@ module Data.Nat.Parity
22
33%access public export
44
5−--------------------------------------------------------------------------------
6−-- Parity
7−--------------------------------------------------------------------------------
5+----------------------------------------
86
9−mutual
10− even : Nat -> Bool
11− even Z = True
12− even (S k) = odd k
13−
14− odd : Nat -> Bool
15− odd Z = False
16− odd (S k) = even k
7+-- Type-level, constructive definitions of parity.
178
189||| A nat is Even when it is twice some other nat.
1910Even : Nat -> Type
@@ -23,6 +14,8 @@ Even n = (half : Nat ** n = half * 2)
2314Odd : Nat -> Type
2415Odd n = (haf : Nat ** n = S $ haf * 2)
2516
17+----------------------------------------
18+
2619||| Two more than an Even is Even.
2720add2Even : Even n -> Even (2 + n)
2821add2Even (half ** pf) = (S half ** cong {f = (+) 2} pf)
@@ -52,20 +45,73 @@ succDoublePredPred {k = S _} prf = cong {f = Nat.pred} prf
5245predEvenOdd : Even (S n) -> Odd n
5346predEvenOdd (half ** pf) = (pred half ** succDoublePredPred pf)
5447
48+----------------------------------------
49+
50+-- Boolean definitions of parity.
51+
52+mutual
53+ even : Nat -> Bool
54+ even Z = True
55+ even (S k) = odd k
56+
57+ odd : Nat -> Bool
58+ odd Z = False
59+ odd (S k) = even k
60+
61+----------------------------------------
62+
63+-- The boolean and type-level definitions are equivalent in the sense
64+-- that a proof of one can be gotten from a proof of the other.
65+
66+mutual
67+ ||| Evens are even.
68+ evenEven : Even n -> even n = True
69+ evenEven {n = Z} _ = Refl
70+ evenEven {n = S _} pf = oddOdd $ predEvenOdd pf
71+
72+ ||| Odds are odd.
73+ oddOdd : Odd n -> odd n = True
74+ oddOdd {n = Z} (_ ** pf) = absurd pf
75+ oddOdd {n = S _} pf = evenEven $ predOddEven pf
76+
77+mutual
78+ ||| If it's even, it's Even.
79+ evenEvenConverse : even n = True -> Even n
80+ evenEvenConverse {n = Z} prf = (0 ** Refl)
81+ evenEvenConverse {n = S k} prf =
82+ let (haf ** pf) = oddOddConverse prf in
83+ (S haf ** cong pf)
84+
85+ ||| If it's odd, it's Odd
86+ oddOddConverse : odd n = True -> Odd n
87+ oddOddConverse {n = Z} prf = absurd prf
88+ oddOddConverse {n = S k} prf =
89+ let (half ** pf) = evenEvenConverse prf in
90+ (half ** cong pf)
91+
92+----------------------------------------
93+
94+||| Every nat is either even or odd.
95+evenorodd : (n : Nat) -> Either (even n = True) (odd n = True)
96+evenorodd Z = Left Refl
97+evenorodd (S k) = case evenorodd k of
98+ Left l => Right l
99+ Right r => Left r
100+
55101||| Every nat is either Even or Odd.
56102evenOrOdd : (n : Nat) -> Either (Even n) (Odd n)
57−evenOrOdd Z = Left (0 ** Refl)
58−evenOrOdd (S k) = case evenOrOdd k of
59− Left (half ** pf) => Right (half ** cong {f = S} pf)
60− Right (haf ** pf) => Left (S haf ** cong {f = S} pf)
103+evenOrOdd n = case evenorodd n of
104+ Left e => Left $ evenEvenConverse e
105+ Right o => Right $ oddOddConverse o
106+
107+||| No nat is both even and odd.
108+notevenandodd : even n = True -> odd n = True -> Void
109+notevenandodd {n = Z} en on = absurd on
110+notevenandodd {n = S _} en on = notevenandodd on en
61111
62112||| No nat is both Even and Odd.
63113notEvenAndOdd : Even n -> Odd n -> Void
64−notEvenAndOdd {n = Z} _ (_ ** odd) = absurd odd
65−notEvenAndOdd {n = (S k)} (half ** even) (haf ** odd) =
66− notEvenAndOdd {n = k}
67− (haf ** cong {f = Nat.pred} odd)
68− (pred half ** succDoublePredPred even)
114+notEvenAndOdd en on = notevenandodd (evenEven en) (oddOdd on)
69115
70116||| Evenness is decidable.
71117evenDec : (n : Nat) -> Dec $ Even n
@@ -79,13 +125,93 @@ oddDec n = case evenOrOdd n of
79125 Left even => No $ notEvenAndOdd even
80126 Right odd => Yes odd
81127
82−mutual
83− ||| Evens are even.
84− evenEven : Even n -> even n = True
85− evenEven {n = Z} _ = Refl
86− evenEven {n = S _} pf = oddOdd $ predEvenOdd pf
128+----------------------------------------
129+
130+||| An Odd is the successor of an Even.
131+oddSuccEven : Odd n -> (m : Nat ** (n = S m, Even m))
132+oddSuccEven (haf ** pf) = (haf * 2 ** (pf, (haf ** Refl)))
133+
134+||| Even plus Even is Even.
135+evenPlusEven : Even j -> Even k -> Even (j + k)
136+evenPlusEven (half_j ** pf_j) (half_k ** pf_k) =
137+ (half_j + half_k **
138+ rewrite pf_j in
139+ rewrite pf_k in
140+ sym $ multDistributesOverPlusLeft half_j half_k 2)
141+
142+||| Odd plus Even is Odd.
143+oddPlusEven : Odd j -> Even k -> Odd (j + k)
144+oddPlusEven oj ek =
145+ let
146+ (i ** (ipj, ei)) = oddSuccEven oj
147+ (half_ik ** eik) = evenPlusEven ei ek
148+ in
149+ (half_ik **
150+ rewrite ipj in
151+ cong {f = S} eik)
152+
153+||| Even plus Odd is Odd.
154+evenPlusOdd : Even j -> Odd k -> Odd (j + k)
155+evenPlusOdd {j} {k} ej ok = rewrite plusCommutative j k in oddPlusEven ok ej
156+
157+||| Odd plus Odd is Even.
158+oddPlusOdd : Odd j -> Odd k -> Even (j + k)
159+oddPlusOdd oj ok =
160+ let
161+ (i ** (ipj, ei)) = oddSuccEven oj
162+ (haf_ik ** oik) = evenPlusOdd ei ok
163+ in
164+ (S haf_ik **
165+ rewrite ipj in
166+ rewrite oik in
167+ Refl)
87168
88− ||| Odds are odd.
89− oddOdd : Odd n -> odd n = True
90− oddOdd {n = Z} (_ ** pf) = absurd pf
91− oddOdd {n = S _} pf = evenEven $ predOddEven pf
169+||| A helper fact.
170+multShuffle : (a, b, c : Nat) ->
171+ (a * c) * (b * c) = ((a * b) * c) * c
172+multShuffle a b c =
173+ rewrite multAssociative (a * c) b c in
174+ rewrite multCommutative (a * c) b in
175+ rewrite multAssociative b a c in
176+ rewrite multCommutative b a in
177+ Refl
178+
179+||| Even times Even is Even.
180+evenMultEven : Even j -> Even k -> Even (j * k)
181+evenMultEven (half_j ** pf_j) (half_k ** pf_k) =
182+ (half_j * half_k * 2 **
183+ rewrite pf_j in
184+ rewrite pf_k in
185+ multShuffle half_j half_k 2)
186+
187+||| Odd times Even is Even.
188+oddMultEven : Odd j -> Even k -> Even (j * k)
189+oddMultEven oj (half_k ** pf_k) =
190+ let
191+ (i ** (ipj, ei)) = oddSuccEven oj
192+ (half_ik ** oik) = evenMultEven ei (half_k ** pf_k)
193+ in
194+ (half_k + half_ik **
195+ rewrite multDistributesOverPlusLeft half_k half_ik 2 in
196+ rewrite ipj in
197+ rewrite oik in
198+ rewrite pf_k in
199+ Refl)
200+
201+||| Even times Odd is Even.
202+evenMultOdd : Even j -> Odd k -> Even (j * k)
203+evenMultOdd {j} {k} ej ok = rewrite multCommutative j k in oddMultEven ok ej
204+
205+||| Odd times Odd is Odd.
206+oddMultOdd : Odd j -> Odd k -> Odd (j * k)
207+oddMultOdd oj (haf_k ** pf_k) =
208+ let
209+ (i ** (ipj, ei)) = oddSuccEven oj
210+ (half_ik ** eik) = evenMultOdd ei (haf_k ** pf_k)
211+ in
212+ (haf_k + half_ik **
213+ rewrite multDistributesOverPlusLeft haf_k half_ik 2 in
214+ rewrite ipj in
215+ rewrite eik in
216+ rewrite pf_k in
217+ Refl)
libs/contrib/Language/JSON.idr+1−1
@@ -1,4 +1,4 @@
1−||| The JSON language, as described at http://json.org/
1+||| The JSON language, as described at https://json.org/
22module Language.JSON
33
44import Language.JSON.Lexer
libs/contrib/contrib.ipkg+1−1
@@ -43,7 +43,7 @@ modules = CFFI
4343 , Data.Heap
4444 , Data.IOArray
4545 , Data.List.Zipper
46− , Data.List.Extra
46+ , Data.List.Reverse
4747
4848 , Data.Matrix
4949 , Data.Matrix.Algebraic
libs/prelude/IO.idr+1−1
@@ -80,7 +80,7 @@ foreign_prim f fname (FFun arg sc) env
8080||| Idris compiler backend in use. For the default C backend, see the
8181||| documentation for `FFI_C`.
8282|||
83−||| For more details, please consult [the Idris documentation](http://docs.idris-lang.org/en/latest/reference/ffi.html).
83+||| For more details, please consult [the Idris documentation](https://idris.readthedocs.io/en/latest/reference/ffi.html).
8484|||
8585||| @ f an FFI descriptor, which is specific to the compiler backend.
8686||| @ fname the name of the foreign function
libs/prelude/Prelude/File.idr+3−2
@@ -150,7 +150,8 @@ do_getFileAccessTime h =
150150private
151151do_getFileModifiedTime : Ptr -> IO Integer
152152do_getFileModifiedTime h =
153− do MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> IO (Raw Integer)) h
153+ do vm <- getMyVM
154+ MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> Ptr -> IO (Raw Integer)) vm h
154155 pure i
155156
156157private
@@ -175,7 +176,7 @@ export
175176fileModifiedTime : File -> IO (Either FileError Integer)
176177fileModifiedTime (FHandle h)
177178 = do s <- do_getFileModifiedTime h
178− if (s < 0)
179+ if (s == -1)
179180 then Left <$> getFileError
180181 else pure (Right s)
181182
libs/prelude/Prelude/Nat.idr+32−61
@@ -512,19 +512,18 @@ plusLeftCancel (S left) right right' p =
512512
513513total plusRightCancel : (left : Nat) -> (left' : Nat) -> (right : Nat) ->
514514 (p : left + right = left' + right) -> left = left'
515−plusRightCancel left left' Z p = rewrite sym (plusZeroRightNeutral left) in
516− rewrite sym (plusZeroRightNeutral left') in
517− p
518−plusRightCancel left left' (S right) p =
519− plusRightCancel left left' right
520− (succInjective _ _ (rewrite plusSuccRightSucc left right in
521− rewrite plusSuccRightSucc left' right in p))
515+plusRightCancel left left' right p =
516+ plusLeftCancel right left left' $
517+ rewrite plusCommutative right left in
518+ rewrite plusCommutative right left' in
519+ p
522520
523521total plusLeftLeftRightZero : (left : Nat) -> (right : Nat) ->
524522 (p : left + right = left) -> right = Z
525−plusLeftLeftRightZero Z right p = p
526−plusLeftLeftRightZero (S left) right p =
527− plusLeftLeftRightZero left right (succInjective _ _ p)
523+plusLeftLeftRightZero left right p =
524+ plusLeftCancel left right Z $
525+ rewrite plusZeroRightNeutral left in
526+ p
528527
529528-- Mult
530529total multZeroLeftZero : (right : Nat) -> Z * right = Z
@@ -558,27 +557,21 @@ multCommutative (S left) right =
558557 rewrite multRightSuccPlus right left in
559558 Refl
560559
561−total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
562− left * (centre + right) = (left * centre) + (left * right)
563−multDistributesOverPlusRight Z centre right = Refl
564−multDistributesOverPlusRight (S left) centre right =
565− let inductiveHypothesis = multDistributesOverPlusRight left centre right in
566− rewrite inductiveHypothesis in
567− rewrite plusAssociative (plus centre (mult left centre)) right (mult left right) in
568− rewrite sym (plusAssociative centre (mult left centre) right) in
569− rewrite plusCommutative (mult left centre) right in
570− rewrite plusAssociative centre right (mult left centre) in
571− rewrite plusAssociative (plus centre right) (mult left centre) (mult left right) in
572− Refl
573−
574560total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
575561 (left + centre) * right = (left * right) + (centre * right)
576−multDistributesOverPlusLeft Z centre right = Refl
577−multDistributesOverPlusLeft (S left) centre right =
578− let inductiveHypothesis = multDistributesOverPlusLeft left centre right in
579− rewrite inductiveHypothesis in
580− rewrite plusAssociative right (mult left right) (mult centre right) in
581− Refl
562+multDistributesOverPlusLeft Z centre right = Refl
563+multDistributesOverPlusLeft (S k) centre right =
564+ rewrite multDistributesOverPlusLeft k centre right in
565+ rewrite plusAssociative right (k * right) (centre * right) in
566+ Refl
567+
568+total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
569+ left * (centre + right) = (left * centre) + (left * right)
570+multDistributesOverPlusRight left centre right =
571+ rewrite multCommutative left (centre + right) in
572+ rewrite multCommutative left centre in
573+ rewrite multCommutative left right in
574+ multDistributesOverPlusLeft centre right left
582575
583576total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
584577 left * (centre * right) = (left * centre) * right
@@ -590,18 +583,10 @@ multAssociative (S left) centre right =
590583 Refl
591584
592585total multOneLeftNeutral : (right : Nat) -> 1 * right = right
593−multOneLeftNeutral Z = Refl
594−multOneLeftNeutral (S right) =
595− let inductiveHypothesis = multOneLeftNeutral right in
596− rewrite inductiveHypothesis in
597− Refl
586+multOneLeftNeutral right = plusZeroRightNeutral right
598587
599588total multOneRightNeutral : (left : Nat) -> left * 1 = left
600−multOneRightNeutral Z = Refl
601−multOneRightNeutral (S left) =
602− let inductiveHypothesis = multOneRightNeutral left in
603− rewrite inductiveHypothesis in
604− Refl
589+multOneRightNeutral left = rewrite multCommutative left 1 in multOneLeftNeutral left
605590
606591-- Minus
607592total minusSuccSucc : (left : Nat) -> (right : Nat) ->
@@ -689,10 +674,7 @@ total powerZeroOne : (base : Nat) -> power base 0 = S Z
689674powerZeroOne base = Refl
690675
691676total powerOneNeutral : (base : Nat) -> power base 1 = base
692−powerOneNeutral Z = Refl
693−powerOneNeutral (S base) =
694− let inductiveHypothesis = powerOneNeutral base in
695− rewrite inductiveHypothesis in Refl
677+powerOneNeutral base = rewrite multCommutative base 1 in multOneLeftNeutral base
696678
697679total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
698680powerOneSuccOne Z = Refl
@@ -701,8 +683,7 @@ powerOneSuccOne (S exp) =
701683 rewrite inductiveHypothesis in Refl
702684
703685total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
704−powerSuccSuccMult Z = Refl
705−powerSuccSuccMult (S base) = rewrite multOneRightNeutral base in Refl
686+powerSuccSuccMult base = rewrite multOneRightNeutral base in Refl
706687
707688total powerPowerMultPower : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
708689 power (power base exp) exp' = power base (exp * exp')
@@ -796,34 +777,24 @@ minimumIdempotent Z = Refl
796777minimumIdempotent (S k) = cong (minimumIdempotent k)
797778
798779total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = Z
799−minimumZeroZeroRight Z = Refl
800−minimumZeroZeroRight (S right) = minimumZeroZeroRight right
780+minimumZeroZeroRight right = Refl
801781
802782total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = Z
803−minimumZeroZeroLeft Z = Refl
804−minimumZeroZeroLeft (S left) = Refl
783+minimumZeroZeroLeft left = rewrite minimumCommutative left 0 in Refl
805784
806785total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
807786 minimum (S left) (S right) = S (minimum left right)
808−minimumSuccSucc Z Z = Refl
809−minimumSuccSucc (S left) Z = Refl
810−minimumSuccSucc Z (S right) = Refl
811−minimumSuccSucc (S left) (S right) = Refl
787+minimumSuccSucc left right = Refl
812788
813789total maximumZeroNRight : (right : Nat) -> maximum Z right = right
814−maximumZeroNRight Z = Refl
815−maximumZeroNRight (S right) = Refl
790+maximumZeroNRight right = Refl
816791
817792total maximumZeroNLeft : (left : Nat) -> maximum left Z = left
818−maximumZeroNLeft Z = Refl
819−maximumZeroNLeft (S left) = Refl
793+maximumZeroNLeft left = rewrite maximumCommutative left Z in Refl
820794
821795total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
822796 S (maximum left right) = maximum (S left) (S right)
823−maximumSuccSucc Z Z = Refl
824−maximumSuccSucc (S left) Z = Refl
825−maximumSuccSucc Z (S right) = Refl
826−maximumSuccSucc (S left) (S right) = Refl
797+maximumSuccSucc left right = Refl
827798
828799total sucMaxL : (l : Nat) -> maximum (S l) l = (S l)
829800sucMaxL Z = Refl
man/idris.1+1−1
@@ -113,7 +113,7 @@ should not necessarily be seen as production ready nor for industrial use.
113113
114114.SH SEE ALSO
115115
116−+ The IDRIS web site (http://idris-lang.org/
116++ The IDRIS web site (https://idris-lang.org/
117117
118118+ The IRC channel #idris, on chat.freenode.net
119119
rts/idris_bitstring.c−2
@@ -1,5 +1,3 @@
1−#include <assert.h>
2−
31#include "idris_rts.h"
42
53VAL idris_b8const(VM *vm, uint8_t a) {
rts/idris_rts.c−10
@@ -1158,16 +1158,6 @@ void idris_disableBuffering(void) {
11581158 setvbuf(stdout, NULL, _IONBF, 0);
11591159}
11601160
1161−#ifndef SEL4
1162−int idris_usleep(int usec) {
1163− struct timespec t;
1164− t.tv_sec = usec / 1000000;
1165− t.tv_nsec = (usec % 1000000) * 1000;
1166−
1167− return nanosleep(&t, NULL);
1168−}
1169−#endif // SEL4
1170−
11711161void stackOverflow(void) {
11721162 fprintf(stderr, "Stack overflow");
11731163 exit(-1);
rts/idris_rts.h−4
@@ -507,10 +507,6 @@ const char *idris_getArg(int i);
507507// disable stdin/stdout buffering
508508void idris_disableBuffering(void);
509509
510−#ifndef SEL4
511−int idris_usleep(int usec);
512−#endif // SEL4
513−
514510// Handle stack overflow.
515511// Just reports an error and exits.
516512
rts/idris_stdfgn.c+12−2
@@ -74,13 +74,13 @@ VAL fileAccessTime(void* h) {
7474 }
7575}
7676
77−VAL fileModifiedTime(void* h) {
77+VAL fileModifiedTime(VM* vm, void* h) {
7878 FILE* f = (FILE*)h;
7979 int fd = fileno(f);
8080
8181 struct stat buf;
8282 if (fstat(fd, &buf) == 0) {
83− return MKBIGI(buf.st_mtime);
83+ return MKBIGUI(vm, buf.st_mtime);
8484 } else {
8585 return MKBIGI(-1);
8686 }
@@ -228,6 +228,16 @@ VAL idris_clock(VM* vm) {
228228 return result;
229229}
230230
231+#ifndef SEL4
232+int idris_usleep(int usec) {
233+ struct timespec t;
234+ t.tv_sec = usec / 1000000;
235+ t.tv_nsec = (usec % 1000000) * 1000;
236+
237+ return nanosleep(&t, NULL);
238+}
239+#endif // SEL4
240+
231241VAL idris_mkFileError(VM* vm) {
232242 VAL result;
233243 switch(errno) {
rts/idris_stdfgn.h+4−1
@@ -18,7 +18,7 @@ int fileSize(void* h);
1818
1919// Return a negative number if not a file (e.g. directory or device)
2020VAL fileAccessTime(void* h);
21−VAL fileModifiedTime(void* h);
21+VAL fileModifiedTime(VM* vm, void* h);
2222VAL fileStatusTime(void* h);
2323
2424void* idris_dirOpen(char* dname);
@@ -54,6 +54,9 @@ char* getEnvPair(int i);
5454
5555VAL idris_time();
5656VAL idris_clock(VM* vm);
57+#ifndef SEL4
58+int idris_usleep(int usec);
59+#endif // SEL4
5760
5861void idris_forceGC();
5962
rts/idris_utf8.c−1
@@ -1,5 +1,4 @@
11#include "idris_utf8.h"
2−#include <stdio.h>
32#include <string.h>
43#include <stdlib.h>
54
src/IRTS/Portable.hs+1
@@ -265,6 +265,7 @@ instance ToJSON BC where
265265 toJSON (FOREIGNCALL r fd ret exps) = object ["FOREIGNCALL" .= (r, fd, ret, exps)]
266266 toJSON (SLIDE i) = object ["SLIDE" .= i]
267267 toJSON (RESERVE i) = object ["RESERVE" .= i]
268+ toJSON (RESERVENOALLOC i) = object ["RESERVENOALLOC" .= i]
268269 toJSON (ADDTOP i) = object ["ADDTOP" .= i]
269270 toJSON (TOPBASE i) = object ["TOPBASE" .= i]
270271 toJSON (BASETOP i) = object ["BASETOP" .= i]
src/Idris/CmdOptions.hs+4−3
@@ -18,6 +18,7 @@ import Idris.Info (getIdrisVersion)
1818import Idris.Options
1919import IRTS.CodegenCommon
2020
21+import qualified Control.Monad.Fail as Fail
2122import Control.Monad.Trans (lift)
2223import Control.Monad.Trans.Except (throwE)
2324import Control.Monad.Trans.Reader (ask)
@@ -71,7 +72,7 @@ runArgParser = do opts <- execParser $ info parser
7172 PP.empty,
7273 PP.text "More details over Idris can be found online here:",
7374 PP.empty,
74− PP.indent 4 (PP.text "http://www.idris-lang.org/")]
75+ PP.indent 4 (PP.text "https://www.idris-lang.org/")]
7576
7677execArgParserPure :: [String] -> ParserResult [Opt]
7778execArgParserPure args = preProcOpts <$> execParserPure (prefs idm) (info parser idm) args
@@ -264,7 +265,7 @@ parseCodegen :: String -> Codegen
264265parseCodegen "bytecode" = Bytecode
265266parseCodegen cg = Via IBCFormat (map toLower cg)
266267
267−parseLogCats :: Monad m => String -> m [LogCat]
268+parseLogCats :: Fail.MonadFail m => String -> m [LogCat]
268269parseLogCats s =
269270 case lastMay (readP_to_S doParse s) of
270271 Just (xs, _) -> return xs
@@ -290,7 +291,7 @@ parseLogCats s =
290291 s <- look
291292 fail $ "Category: " ++ s ++ " is not recognised."
292293
293−parseConsoleWidth :: Monad m => String -> m ConsoleWidth
294+parseConsoleWidth :: Fail.MonadFail m => String -> m ConsoleWidth
294295parseConsoleWidth "auto" = return AutomaticWidth
295296parseConsoleWidth "infinite" = return InfinitelyWide
296297parseConsoleWidth s =
src/Idris/Core/CaseTree.hs+1−1
@@ -627,7 +627,7 @@ groupCons cs = gc [] cs
627627 PConst cval -> return $ addConG cval (ps, res) acc
628628 PSuc n -> return $ addg False CSuc [n] (ps, res) acc
629629 PReflected fn args -> return $ addg False (CFn fn) args (ps, res) acc
630− pat -> fail $ show pat ++ " is not a constructor or constant (can't happen)"
630+ pat -> error $ show pat ++ " is not a constructor or constant (can't happen)"
631631
632632 addg uniq c conargs res []
633633 = [ConGroup uniq c [(conargs, res)]]
src/Idris/Core/TT.hs+6
@@ -70,6 +70,7 @@ import qualified Prelude as S (Semigroup(..))
7070import Control.Applicative (Alternative, Applicative(..))
7171import qualified Control.Applicative as A (Alternative(..))
7272import Control.DeepSeq (($!!))
73+import qualified Control.Monad.Fail as Fail
7374import Control.Monad.State.Strict
7475import Data.Binary hiding (get, put)
7576import Data.Char
@@ -324,6 +325,11 @@ bindTC x k = case x of
324325instance Monad TC where
325326 return x = OK x
326327 x >>= k = bindTC x k
328+#if !(MIN_VERSION_base(4,13,0))
329+ fail = Fail.fail
330+#endif
331+
332+instance Fail.MonadFail TC where
327333 fail e = Error (InternalMsg e)
328334
329335instance MonadPlus TC where
src/Idris/ModeCommon.hs+1−1
@@ -167,7 +167,7 @@ loadInputs inputs toline -- furthest line to read in input source files
167167banner = " ____ __ _ \n" ++
168168 " / _/___/ /____(_)____ \n" ++
169169 " / // __ / ___/ / ___/ Version " ++ getIdrisVersion ++ "\n" ++
170− " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
170+ " _/ // /_/ / / / (__ ) https://www.idris-lang.org/ \n" ++
171171 " /___/\\__,_/_/ /_/____/ Type :? for help \n" ++
172172 "\n" ++
173173 "Idris is free software with ABSOLUTELY NO WARRANTY. \n" ++
src/Idris/Parser/Stack.hs+16−2
@@ -5,7 +5,7 @@ Description : Idris parser stack and its primitives.
55License : BSD3
66Maintainer : The Idris Community.
77-}
8−{-# LANGUAGE ConstraintKinds, FlexibleContexts, MultiParamTypeClasses #-}
8+{-# LANGUAGE CPP, ConstraintKinds, FlexibleContexts, MultiParamTypeClasses #-}
99module Idris.Parser.Stack
1010 ( -- * Parsing
1111 Parser(..)
@@ -36,6 +36,7 @@ import Idris.Core.TT (FC(..))
3636import Idris.Output (Message(..))
3737
3838import Control.Arrow (app)
39+import qualified Control.Monad.Fail as Fail
3940import Control.Monad.State.Strict (StateT(..), evalStateT)
4041import Control.Monad.Writer.Strict (MonadWriter(..), WriterT(..), listen,
4142 runWriterT, tell)
@@ -51,7 +52,7 @@ import qualified Util.Pretty as PP
5152type Parser s = StateT s (WriterT FC (P.Parsec Void String))
5253
5354-- | A constraint for parsing without state
54−type Parsing m = (P.MonadParsec Void String m, MonadWriter FC m)
55+type Parsing m = (Fail.MonadFail m, P.MonadParsec Void String m, MonadWriter FC m)
5556
5657-- | Run the Idris parser stack
5758runparser :: Parser st res -> st -> String -> String -> Either ParseError res
@@ -76,11 +77,20 @@ parseErrorOffset = P.errorOffset . parseError
7677instance Message ParseError where
7778 messageExtent err = sourcePositionFC pos
7879 where
80+#if MIN_VERSION_megaparsec(8,0,0)
81+ P.PosState {P.pstateSourcePos = pos} =
82+ P.reachOffsetNoLine (parseErrorOffset err) (parseErrorPosState err)
83+#else
7984 (pos, _) = P.reachOffsetNoLine (parseErrorOffset err) (parseErrorPosState err)
85+#endif
8086 messageText = PP.text . init . P.parseErrorTextPretty . parseError
8187 messageSource err = Just sline
8288 where
89+#if MIN_VERSION_megaparsec(8,0,0)
90+ (sline, _) = P.reachOffset (parseErrorOffset err) (parseErrorPosState err)
91+#else
8392 (_, sline, _) = P.reachOffset (parseErrorOffset err) (parseErrorPosState err)
93+#endif
8494
8595-- | A fully formatted parse error, with caret and bar, etc.
8696prettyError :: ParseError -> String
@@ -88,7 +98,11 @@ prettyError = P.errorBundlePretty . unParseError
8898
8999{- * Mark and restore -}
90100
101+#if MIN_VERSION_megaparsec(8,0,0)
102+type Mark = P.State String Void
103+#else
91104type Mark = P.State String
105+#endif
92106
93107-- | Retrieve the parser state so we can restart from this point later.
94108mark :: Parsing m => m Mark
src/Idris/Reflection.hs+1−1
@@ -1105,7 +1105,7 @@ unApplyRaw tm = ua [] tm
11051105 ua args t = (t, args)
11061106
11071107-- | Build the reflected function definition(s) that correspond(s) to
1108−-- a provided unqualifed name
1108+-- a provided unqualified name
11091109buildFunDefns :: IState -> Name -> [RFunDefn Term]
11101110buildFunDefns ist n =
11111111 [ mkFunDefn name clauses
stack-11.22.yamlnew file+21
@@ -0,0 +1,21 @@
1+#recheck extra-deps next on resolver or cabal file change
2+resolver: lts-11.22
3+
4+extra-deps:
5+- cheapskate-0.1.1.2
6+- megaparsec-7.0.5
7+- Cabal-2.4.1.0
8+- network-3.1.1.1
9+- parser-combinators-1.0.0
10+
11+flags:
12+ idris:
13+ FFI: true
14+ GMP: true
15+
16+ghc-options:
17+ idris: -fwarn-unused-imports -fwarn-unused-binds
18+
19+nix:
20+ enable: false
21+ shell-file: stack-shell.nix
stack-12.26.yamlnew file+20
@@ -0,0 +1,20 @@
1+#recheck extra-deps next on resolver or cabal file change
2+resolver: lts-12.26
3+
4+extra-deps:
5+- cheapskate-0.1.1.2
6+- megaparsec-7.0.5
7+- Cabal-2.4.1.0
8+- network-3.1.1.1
9+
10+flags:
11+ idris:
12+ FFI: true
13+ GMP: true
14+
15+ghc-options:
16+ idris: -fwarn-unused-imports -fwarn-unused-binds
17+
18+nix:
19+ enable: false
20+ shell-file: stack-shell.nix
stack-15.3.yamlnew file+17
@@ -0,0 +1,17 @@
1+#recheck extra-deps next on resolver or cabal file change
2+resolver: lts-15.3
3+
4+extra-deps:
5+- cheapskate-0.1.1.2
6+
7+flags:
8+ idris:
9+ FFI: true
10+ GMP: true
11+
12+ghc-options:
13+ idris: -fwarn-unused-imports -fwarn-unused-binds
14+
15+nix:
16+ enable: false
17+ shell-file: stack-shell.nix
stack-15.4.yamlnew file+17
@@ -0,0 +1,17 @@
1+#recheck extra-deps next on resolver or cabal file change
2+resolver: lts-15.4
3+
4+extra-deps:
5+- cheapskate-0.1.1.2
6+
7+flags:
8+ idris:
9+ FFI: true
10+ GMP: true
11+
12+ghc-options:
13+ idris: -fwarn-unused-imports -fwarn-unused-binds
14+
15+nix:
16+ enable: false
17+ shell-file: stack-shell.nix
stack-alt.yamldeleted−25
@@ -1,25 +0,0 @@
1−#recheck extra-deps next on resolver or cabal file change
2−resolver: lts-11.4
3−
4−packages:
5− - location: .
6−
7−extra-deps:
8− - network-2.8.0.0@sha256:aae171e6c6028a7791dbe4de5b9d2da398056359e3cc7927465ffa3cdae1aa0b
9− - Cabal-2.2.0.1@sha256:2a80d8fb655474f0eaeb20434c47f64f84e6302e55973056f00df8ca050b9683
10− - megaparsec-7.0.4
11− - parser-combinators-1.0.0
12− - zip-archive-0.3.3@sha256:47cf2d66cc8e237f7226837758e1b041e24048ef3820d3d10276c500edb921bf
13− - containers-0.5.11.0@sha256:28ad7337057442f75bc689315ab4ec7bdf5e6b2c39668f306672cecd82c02798
14−
15−flags:
16− idris:
17− FFI: true
18− GMP: true
19−
20−ghc-options:
21− idris: -fwarn-unused-imports -fwarn-unused-binds
22−
23−nix:
24− enable: false
25− shell-file: stack-shell.nix
stack.yamlmode 100644 → 120000+1−24
@@ -1,24 +0,0 @@
1−#recheck extra-deps next on resolver or cabal file change
2−resolver: lts-13.21
3−
4−extra-deps:
5− - network-2.8.0.0@sha256:aae171e6c6028a7791dbe4de5b9d2da398056359e3cc7927465ffa3cdae1aa0b
6− - Cabal-2.2.0.1@sha256:2a80d8fb655474f0eaeb20434c47f64f84e6302e55973056f00df8ca050b9683
7− - megaparsec-7.0.4
8− - parser-combinators-1.0.0
9− - zip-archive-0.3.3@sha256:47cf2d66cc8e237f7226837758e1b041e24048ef3820d3d10276c500edb921bf
10− - containers-0.5.11.0@sha256:28ad7337057442f75bc689315ab4ec7bdf5e6b2c39668f306672cecd82c02798
11− - tasty-rerun-1.1.14@sha256:ba9c19a281535bea566e1044bc02c36ef17abcb310af4b6a149ec11780c7ce35
12− - binary-0.8.7.0@sha256:ae3e6cca723ac55c54bbb3fa771bcf18142bc727afd57818e66d6ee6c8044f12
13−
14−flags:
15− idris:
16− FFI: true
17− GMP: true
18−
19−ghc-options:
20− idris: -fwarn-unused-imports -fwarn-unused-binds
21−
22−nix:
23− enable: false
24− shell-file: stack-shell.nix
@@ -0,0 +1 @@
1+stack-15.4.yaml
test/README.md+5−5
@@ -113,18 +113,18 @@ and somewhat self-explanatory.
113113
1141141. Choose the family your test shall belong to and remember its identifier.
1151152. Pick the next available integer in the test family. It will be the index.
116−3. Say the family's identifier is `foo` and the index is `42`. You should call `./mktest.pl foo042` ; this will create the directory and a simple `run` script.
116+3. Say the family's identifier is `foo` and the index is `42`. You should call `./mktest.pl foo042` ; this will create the directory and a simple `run.sh` script.
1171174. Modify the `run` script to your liking. If you want to call the idris executable, write `${IDRIS:-idris} $@`.
1181185. Add any file you may need in the directory. If they don't end in `.idr`, you should remember them for the next step.
1191196. Add your test in `TestData.hs`. Each family has a list of `(Index, CompatCodegen)`. See the next section for the available values in `CompatCodegen`. In most cases, you should write `( 42, ANY)`.
120−7. Generate the `expected` file by doing:
120+7. Generate the `expected.out` file by doing:
121121 ```
122122 # Using cabal
123123 cabal test --test-options="--pattern foo042 --accept"
124124 # Using stack
125125 stack test --test-arguments="--pattern foo042 --accept"
126126 ```
127−8. Check the content of `expected`. Maybe the test didn't do what you thought it would. Fix and go back to 7 until it's ok.
127+8. Check the content of `expected.out`. Maybe the test didn't do what you thought it would. Fix and go back to 7 until it's ok.
128128
129129### Specifying compatible backends
130130
@@ -146,7 +146,7 @@ Currently, `NONE` has the same effect as `ANY`, but this will change.
146146
147147### Updating golden files
148148
149−To update the `expected` file for every test, do one of the following:
149+To update the `expected.out` file for every test, do one of the following:
150150
151151```
152152# Using make
@@ -157,4 +157,4 @@ cabal test --test-options="--accept"
157157stack test --test-arguments="--accept"
158158```
159159
160−"Accepted" tests are the ones that update the golden file. A test can still fail if the `run` script itself crashes.
160+"Accepted" tests are the ones that update the golden file. A test can still fail if the `run.sh` script itself crashes.
test/TestRun.hs+2−2
@@ -62,7 +62,7 @@ ingredients = defaultIngredients ++
6262test :: String -> String -> IO () -> TestTree
6363test testName path = goldenVsFileDiff testName diff ref output
6464 where
65− ref = path </> "expected"
65+ ref = path </> "expected.out"
6666 output = path </> "output"
6767 diff ref new | os == "openbsd" = ["diff", "-u", new, ref]
6868 | otherwise = ["diff", "--strip-trailing-cr", "-u", new, ref]
@@ -92,7 +92,7 @@ mkGoldenTests testFamilies flags =
9292-- this thing.
9393runTest :: String -> Flags -> IO ()
9494runTest path flags = do
95− let run = (proc "bash" ("run" : flags)) {cwd = Just path}
95+ let run = (proc "bash" ("run.sh" : flags)) {cwd = Just path}
9696 (_, output, error_out) <- readCreateProcessWithExitCode run ""
9797 writeFile (path </> "output") (normalise output)
9898 when (error_out /= "") $ hPutStrLn stderr ("\nError: " ++ path ++ "\n" ++ error_out)
test/base001/expected → test/base001/expected.outrenamed

The content is the same.

test/base001/run → test/base001/run.shrenamed+1−1
@@ -3,7 +3,7 @@
33set -u
44
55if [[ ${OSTYPE} = 'msys' ]]; then
6− cat expected # skip this test on Windows
6+ cat expected.out # skip this test on Windows
77else
88 ${IDRIS:-idris} "$@" --build base001.ipkg | grep -v 'make.*:'
99 ./base001 2>&1 | grep -v '^sh:.*\./does-not-exist:'
test/basic001/expected → test/basic001/expected.outrenamed

The content is the same.

test/basic001/run → test/basic001/run.shrenamed

Only the mode changed.

test/basic002/expected → test/basic002/expected.outrenamed

The content is the same.

test/basic002/run → test/basic002/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic003/run → test/basic003/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic004/run → test/basic004/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic005/run → test/basic005/run.shrenamed

Only the mode changed.

test/basic006/expected → test/basic006/expected.outrenamed

The content is the same.

test/basic006/run → test/basic006/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic007/run → test/basic007/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic008/run → test/basic008/run.shrenamed

Only the mode changed.

test/basic009/expected → test/basic009/expected.outrenamed

The content is the same.

test/basic009/run → test/basic009/run.shrenamed

Only the mode changed.

test/basic010/expected → test/basic010/expected.outrenamed

The content is the same.

test/basic010/run → test/basic010/run.shrenamed

Only the mode changed.

test/basic011/expected → test/basic011/expected.outrenamed

The content is the same.

test/basic011/run → test/basic011/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic012/run → test/basic012/run.shrenamed

Only the mode changed.

test/basic013/expected → test/basic013/expected.outrenamed

The content is the same.

test/basic013/run → test/basic013/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic014/run → test/basic014/run.shrenamed

Only the mode changed.

test/basic015/expected → test/basic015/expected.outrenamed

The content is the same.

test/basic015/run → test/basic015/run.shrenamed

Only the mode changed.

test/basic016/expected → test/basic016/expected.outrenamed

The content is the same.

test/basic016/run → test/basic016/run.shrenamed

Only the mode changed.

test/basic017/expected → test/basic017/expected.outrenamed

The content is the same.

test/basic017/run → test/basic017/run.shrenamed

Only the mode changed.

test/basic018/expected → test/basic018/expected.outrenamed

The content is the same.

test/basic018/run → test/basic018/run.shrenamed

Only the mode changed.

test/basic019/expected → test/basic019/expected.outrenamed

The content is the same.

test/basic019/run → test/basic019/run.shrenamed

Only the mode changed.

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

The content is the same.

test/basic020/run → test/basic020/run.shrenamed

Only the mode changed.

test/basic021/expected → test/basic021/expected.outrenamed

The content is the same.

test/basic021/run → test/basic021/run.shrenamed

Only the mode changed.

test/basic022/expected → test/basic022/expected.outrenamed

The content is the same.

test/basic022/run → test/basic022/run.shrenamed

Only the mode changed.

test/basic023/expected → test/basic023/expected.outrenamed

The content is the same.

test/basic023/run → test/basic023/run.shrenamed

Only the mode changed.

test/basic024/expected → test/basic024/expected.outrenamed

The content is the same.

test/basic024/input → test/basic024/input.inrenamed

The content is the same.

test/basic024/run → test/basic024/run.shrenamed+1−1
@@ -1,6 +1,6 @@
11#!/usr/bin/env bash
22
3−${IDRIS:-idris} $@ --quiet --port none < input
3+${IDRIS:-idris} $@ --quiet --port none < input.in
44${IDRIS:-idris} $@ basic024.idr -o basic024
55
66./basic024
test/basic025/expected → test/basic025/expected.outrenamed

The content is the same.

test/basic025/input → test/basic025/input.inrenamed

The content is the same.

test/basic025/run → test/basic025/run.shrenamed+2−2
@@ -1,7 +1,7 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none < input
2+${IDRIS:-idris} $@ --quiet --port none < input.in
33${IDRIS:-idris} $@ -o basic025 basic025.idr
44
5−./basic025 input
5+./basic025 input.in
66
77rm -f basic025 *.ibc
test/basic026/expected → test/basic026/expected.outrenamed

The content is the same.

test/basic026/run → test/basic026/run.shrenamed

The content is the same.

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

The content is the same.

test/bignum001/run → test/bignum001/run.shrenamed

Only the mode changed.

test/bignum002/expected → test/bignum002/expected.outrenamed

The content is the same.

test/bignum002/run → test/bignum002/run.shrenamed

Only the mode changed.

test/bignum003/expected → test/bignum003/expected.outrenamed

The content is the same.

test/bignum003/run → test/bignum003/run.shrenamed

Only the mode changed.

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

The content is the same.

test/bounded001/run → test/bounded001/run.shrenamed

Only the mode changed.

test/buffer001/expected → test/buffer001/expected.outrenamed

The content is the same.

test/buffer001/run → test/buffer001/run.shrenamed

Only the mode changed.

test/buffer002/expected → test/buffer002/expected.outrenamed

The content is the same.

test/buffer002/run → test/buffer002/run.shrenamed

Only the mode changed.

test/contrib001/expected → test/contrib001/expected.outrenamed

The content is the same.

test/contrib001/run → test/contrib001/run.shrenamed

Only the mode changed.

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

The content is the same.

test/corecords001/run → test/corecords001/run.shrenamed

Only the mode changed.

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

The content is the same.

test/corecords002/run → test/corecords002/run.shrenamed

Only the mode changed.

test/delab001/expected → test/delab001/expected.outrenamed

The content is the same.

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

The content is the same.

test/delab001/run → test/delab001/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolor delab001.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolor delab001.idr < input.in
33rm -f *.ibc
test/directives001/expected → test/directives001/expected.outrenamed

The content is the same.

test/directives001/run → test/directives001/run.shrenamed

Only the mode changed.

test/directives002/expected → test/directives002/expected.outrenamed

The content is the same.

test/directives002/run → test/directives002/run.shrenamed

The content is the same.

test/directives003/expected → test/directives003/expected.outrenamed

The content is the same.

test/directives003/run → test/directives003/run.shrenamed

Only the mode changed.

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

The content is the same.

test/disambig002/run → test/disambig002/run.shrenamed

Only the mode changed.

test/docs001/expected → test/docs001/expected.outrenamed

The content is the same.

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

The content is the same.

test/docs001/run → test/docs001/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolor docs001.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolor docs001.idr < input.in
33rm *.ibc
test/docs002/expected → test/docs002/expected.outrenamed

The content is the same.

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

The content is the same.

test/docs002/run → test/docs002/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --nobanner --nocolor --quiet --port none docs002.idr < input
2+${IDRIS:-idris} $@ --nobanner --nocolor --quiet --port none docs002.idr < input.in
33rm *.ibc
test/docs003/expected → test/docs003/expected.outrenamed

The content is the same.

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

The content is the same.

test/docs003/run → test/docs003/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolor docs003.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolor docs003.idr < input.in
33rm *.ibc
test/docs004/expected → test/docs004/expected.outrenamed

The content is the same.

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

The content is the same.

test/docs004/run → test/docs004/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolor docs004.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolor docs004.idr < input.in
33rm *.ibc
test/docs005/expected → test/docs005/expected.outrenamed

The content is the same.

test/docs005/input → test/docs005/input.inrenamed

The content is the same.

test/docs005/run → test/docs005/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolor docs005.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolor docs005.idr < input.in
33rm *.ibc
test/docs006/expected → test/docs006/expected.outrenamed

The content is the same.

test/docs006/input → test/docs006/input.inrenamed

The content is the same.

test/docs006/run → test/docs006/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolor docs006.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolor docs006.idr < input.in
33rm *.ibc
test/dsl001/expected → test/dsl001/expected.outrenamed

The content is the same.

test/dsl001/input → test/dsl001/input.inrenamed

The content is the same.

test/dsl001/run → test/dsl001/run.shrenamed+1−1
@@ -1,5 +1,5 @@
11#!/usr/bin/env bash
22${IDRIS:-idris} $@ test001.idr -o test001 --partial-eval
33./test001
4−${IDRIS:-idris} $@ test001.idr --partial-eval --quiet --port none < input
4+${IDRIS:-idris} $@ test001.idr --partial-eval --quiet --port none < input.in
55rm -f test001 test001.ibc
test/dsl002/expected → test/dsl002/expected.outrenamed

The content is the same.

test/dsl002/run → test/dsl002/run.shrenamed

Only the mode changed.

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

The content is the same.

test/dsl002/test014.idr+1−1
@@ -64,6 +64,6 @@ readH fn = res (do let x = open fn Reading
6464 else rputStrLn "Error")
6565
6666main : IO ()
67−main = run (readH "test")
67+main = run (readH "test.in")
6868
6969
test/dsl003/expected → test/dsl003/expected.outrenamed

The content is the same.

test/dsl003/run → test/dsl003/run.shrenamed

Only the mode changed.

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

The content is the same.

test/dsl004/run → test/dsl004/run.shrenamed

Only the mode changed.

test/effects001/expected → test/effects001/expected.outrenamed

The content is the same.

test/effects001/run → test/effects001/run.shrenamed

Only the mode changed.

test/effects001/test021.idr+1−1
@@ -31,7 +31,7 @@ readFileCount = readAcc []
3131
3232testFile : TestFileIO () ()
3333testFile = do
34− Success <- open "testFile" Read
34+ Success <- open "testFile.in" Read
3535 | (FError err) => do
3636 putStrLn "Error!"
3737 pure ()
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/run → test/effects002/run.shrenamed

Only the mode changed.

test/effects003/expected → test/effects003/expected.outrenamed

The content is the same.

test/effects003/input → test/effects003/input.inrenamed

The content is the same.

test/effects003/run → test/effects003/run.shrenamed+1−1
@@ -1,4 +1,4 @@
11#!/usr/bin/env bash
22${IDRIS:-idris} $@ hangman.idr --nocolour -p effects -o hangman
3−./hangman < input
3+./hangman < input.in
44rm -f hangman *.ibc
test/effects004/expected → test/effects004/expected.outrenamed

The content is the same.

test/effects004/input → test/effects004/input.inrenamed

The content is the same.

test/effects004/run → test/effects004/run.shrenamed+1−1
@@ -1,4 +1,4 @@
11#!/usr/bin/env bash
22${IDRIS:-idris} $@ effects004.idr -o effects004 -p effects
3−./effects004 < input
3+./effects004 < input.in
44rm -f effects004 *.ibc
test/effects005/expected → test/effects005/expected.outrenamed

The content is the same.

test/effects005/run → test/effects005/run.shrenamed

Only the mode changed.

test/error001/expected → test/error001/expected.outrenamed

The content is the same.

test/error001/run → test/error001/run.shrenamed

Only the mode changed.

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

The content is the same.

test/error002/run → test/error002/run.shrenamed

Only the mode changed.

test/error003/expected → test/error003/expected.outrenamed

The content is the same.

test/error003/run → test/error003/run.shrenamed

Only the mode changed.

test/error004/expected → test/error004/expected.outrenamed

The content is the same.

test/error004/run → test/error004/run.shrenamed

Only the mode changed.

test/error005/expected → test/error005/expected.outrenamed

The content is the same.

test/error005/run → test/error005/run.shrenamed

Only the mode changed.

test/error006/expected → test/error006/expected.outrenamed

The content is the same.

test/error006/run → test/error006/run.shrenamed

Only the mode changed.

test/error007/expected → test/error007/expected.outrenamed

The content is the same.

test/error007/run → test/error007/run.shrenamed

Only the mode changed.

test/error008/expected → test/error008/expected.outrenamed

The content is the same.

test/error008/run → test/error008/run.shrenamed

Only the mode changed.

test/error009/expected → test/error009/expected.outrenamed

The content is the same.

test/error009/run → test/error009/run.shrenamed

Only the mode changed.

test/ffi001/expected → test/ffi001/expected.outrenamed

The content is the same.

test/ffi001/run → test/ffi001/run.shrenamed

Only the mode changed.

test/ffi002/expected → test/ffi002/expected.outrenamed

The content is the same.

test/ffi002/run → test/ffi002/run.shrenamed

Only the mode changed.

test/ffi003/expected → test/ffi003/expected.outrenamed

The content is the same.

test/ffi003/input → test/ffi003/input.inrenamed

The content is the same.

test/ffi003/run → test/ffi003/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolour test024.idr --exec main < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolour test024.idr --exec main < input.in
33rm -f *.ibc
test/ffi004/expected → test/ffi004/expected.outrenamed

The content is the same.

test/ffi004/run → test/ffi004/run.shrenamed

Only the mode changed.

test/ffi005/expected → test/ffi005/expected.outrenamed

The content is the same.

test/ffi005/run → test/ffi005/run.shrenamed

Only the mode changed.

test/ffi006/expected → test/ffi006/expected.outrenamed

The content is the same.

test/ffi006/run → test/ffi006/run.shrenamed

Only the mode changed.

test/ffi007/expected → test/ffi007/expected.outrenamed

The content is the same.

test/ffi007/run → test/ffi007/run.shrenamed

The content is the same.

test/ffi008/expected → test/ffi008/expected.outrenamed

The content is the same.

test/ffi008/run → test/ffi008/run.shrenamed

The content is the same.

test/ffi009/expected → test/ffi009/expected.outrenamed

The content is the same.

test/ffi009/run → test/ffi009/run.shrenamed

Only the mode changed.

test/ffi010/expected → test/ffi010/expected.outrenamed

The content is the same.

test/ffi010/run → test/ffi010/run.shrenamed

Only the mode changed.

test/ffi011/expected → test/ffi011/expected.outrenamed

The content is the same.

test/ffi011/ffi011 → test/ffi011/ffi011.jsrenamed

The content is the same.

test/ffi011/run → test/ffi011/run.shrenamed+1−1
@@ -1,4 +1,4 @@
11#!/usr/bin/env bash
22${IDRIS:-idris} $@ ffi011.idr --interface -o lib.js
3−node ./ffi011
3+node ./ffi011.js
44rm -f *.ibc lib.js
test/ffi012/expected → test/ffi012/expected.outrenamed

The content is the same.

test/ffi012/ffi012 → test/ffi012/ffi012.jsrenamed

The content is the same.

test/ffi012/run → test/ffi012/run.shrenamed

Only the mode changed.

test/ffi013/expected → test/ffi013/expected.outrenamed

The content is the same.

test/ffi013/run → test/ffi013/run.shrenamed

Only the mode changed.

test/folding001/expected → test/folding001/expected.outrenamed

The content is the same.

test/folding001/run → test/folding001/run.shrenamed

Only the mode changed.

test/idrisdoc001/expected → test/idrisdoc001/expected.outrenamed

The content is the same.

test/idrisdoc001/run → test/idrisdoc001/run.shrenamed

Only the mode changed.

test/idrisdoc002/expected → test/idrisdoc002/expected.outrenamed

The content is the same.

test/idrisdoc002/run → test/idrisdoc002/run.shrenamed

Only the mode changed.

test/idrisdoc003/expected → test/idrisdoc003/expected.outrenamed

The content is the same.

test/idrisdoc003/run → test/idrisdoc003/run.shrenamed

Only the mode changed.

test/idrisdoc004/expected → test/idrisdoc004/expected.outrenamed

The content is the same.

test/idrisdoc004/run → test/idrisdoc004/run.shrenamed

Only the mode changed.

test/idrisdoc005/expected → test/idrisdoc005/expected.outrenamed

The content is the same.

test/idrisdoc005/run → test/idrisdoc005/run.shrenamed

Only the mode changed.

test/idrisdoc006/expected → test/idrisdoc006/expected.outrenamed

The content is the same.

test/idrisdoc006/run → test/idrisdoc006/run.shrenamed

Only the mode changed.

test/idrisdoc007/expected → test/idrisdoc007/expected.outrenamed

The content is the same.

test/idrisdoc007/run → test/idrisdoc007/run.shrenamed

Only the mode changed.

test/idrisdoc008/expected → test/idrisdoc008/expected.outrenamed

The content is the same.

test/idrisdoc008/run → test/idrisdoc008/run.shrenamed

Only the mode changed.

test/idrisdoc009/expected → test/idrisdoc009/expected.outrenamed

The content is the same.

test/idrisdoc009/input → test/idrisdoc009/input.inrenamed

The content is the same.

test/idrisdoc009/run → test/idrisdoc009/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --nocolour --quiet --port none Test.idr < input
2+${IDRIS:-idris} $@ --nocolour --quiet --port none Test.idr < input.in
33rm -f *.ibc
test/interactive001/expected → test/interactive001/expected.outrenamed

The content is the same.

test/interactive001/input → test/interactive001/input.inrenamed

The content is the same.

test/interactive001/run → test/interactive001/run.shrenamed+1−1
@@ -1,5 +1,5 @@
11#!/usr/bin/env bash
22
3−${IDRIS:-idris} $@ --quiet --port none --indent-with 8 interactive001.idr < input
3+${IDRIS:-idris} $@ --quiet --port none --indent-with 8 interactive001.idr < input.in
44
55rm -f *.ibc
test/interactive002/expected → test/interactive002/expected.outrenamed

The content is the same.

test/interactive002/input → test/interactive002/input.inrenamed

The content is the same.

test/interactive002/run → test/interactive002/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none interactive002.idr < input
2+${IDRIS:-idris} $@ --quiet --port none interactive002.idr < input.in
33rm -f *.ibc
test/interactive003/expected → test/interactive003/expected.outrenamed

The content is the same.

test/interactive003/input → test/interactive003/input.inrenamed

The content is the same.

test/interactive003/run → test/interactive003/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none interactive003.idr < input
2+${IDRIS:-idris} $@ --quiet --port none interactive003.idr < input.in
33rm -f *.ibc
test/interactive004/expected → test/interactive004/expected.outrenamed

The content is the same.

test/interactive004/input → test/interactive004/input.inrenamed

The content is the same.

test/interactive004/run → test/interactive004/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none interactive004.idr < input
2+${IDRIS:-idris} $@ --quiet --port none interactive004.idr < input.in
33rm -f *.ibc
test/interactive005/expected → test/interactive005/expected.outrenamed

The content is the same.

test/interactive005/input → test/interactive005/input.inrenamed

The content is the same.

test/interactive005/run → test/interactive005/run.shrenamed+1−1
@@ -1,5 +1,5 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --nocolour --quiet --port none interactive005.idr --consolewidth 70 < input
2+${IDRIS:-idris} $@ --nocolour --quiet --port none interactive005.idr --consolewidth 70 < input.in
33rm -f *.ibc
44rm -f hello.bytecode
55rm -f hello
test/interactive006/expected → test/interactive006/expected.outrenamed

The content is the same.

test/interactive006/input → test/interactive006/input.inrenamed

The content is the same.

test/interactive006/run → test/interactive006/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --port 5000 interactive006.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --port 5000 interactive006.idr < input.in
33rm -f *.ibc
test/interactive007/expected → test/interactive007/expected.outrenamed

The content is the same.

test/interactive007/input → test/interactive007/input.inrenamed

The content is the same.

test/interactive007/run → test/interactive007/run.shrenamed+1−1
@@ -1,2 +1,2 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ -p contrib --nobanner --nocolor --port none < input | perl -pe 's-Data\\Z-Data/Z-g'
2+${IDRIS:-idris} $@ -p contrib --nobanner --nocolor --port none < input.in | perl -pe 's-Data\\Z-Data/Z-g'
test/interactive008/expected → test/interactive008/expected.outrenamed

The content is the same.

test/interactive008/input → test/interactive008/input.inrenamed

The content is the same.

test/interactive008/rundeleted−2
@@ -1,2 +0,0 @@
1−#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --nobanner --nocolor --port none < input
test/interactive008/run.shnew file+2
@@ -0,0 +1,2 @@
1+#!/usr/bin/env bash
2+${IDRIS:-idris} $@ --nobanner --nocolor --port none < input.in
test/interactive009/expected → test/interactive009/expected.outrenamed

The content is the same.

test/interactive009/input → test/interactive009/input.inrenamed

The content is the same.

test/interactive009/run → test/interactive009/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none interactive009.idr < input
2+${IDRIS:-idris} $@ --quiet --port none interactive009.idr < input.in
33rm -f *.ibc
test/interactive010/expected → test/interactive010/expected.outrenamed

The content is the same.

test/interactive010/input → test/interactive010/input.inrenamed

The content is the same.

test/interactive010/run → test/interactive010/run.shrenamed+1−1
@@ -1,2 +1,2 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nobanner --nocolor < input
2+${IDRIS:-idris} $@ --quiet --port none --nobanner --nocolor < input.in
test/interactive011/expected → test/interactive011/expected.outrenamed

The content is the same.

test/interactive011/input → test/interactive011/input.inrenamed

The content is the same.

test/interactive011/run → test/interactive011/run.shrenamed+1−1
@@ -1,6 +1,6 @@
11#!/usr/bin/env bash
22
33cd src
4−${IDRIS:-idris} "$@" --quiet --port none --indent-clause 4 Main.idr <../input
4+${IDRIS:-idris} "$@" --quiet --port none --indent-clause 4 Main.idr <../input.in
55
66rm -f *.ibc
test/interactive012/expected → test/interactive012/expected.outrenamed

The content is the same.

test/interactive012/input → test/interactive012/input.inrenamed

The content is the same.

test/interactive012/run → test/interactive012/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --nocolour --consolewidth 70 --quiet --port none interactive012.idr < input
2+${IDRIS:-idris} $@ --nocolour --consolewidth 70 --quiet --port none interactive012.idr < input.in
33rm -f *.ibc
test/interactive013/expected → test/interactive013/expected.outrenamed

The content is the same.

test/interactive013/input → test/interactive013/input.inrenamed

The content is the same.

test/interactive013/run → test/interactive013/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none interactive013.idr < input
2+${IDRIS:-idris} $@ --quiet --port none interactive013.idr < input.in
33rm -f *.ibc
test/interactive014/expected → test/interactive014/expected.outrenamed

The content is the same.

test/interactive014/input → test/interactive014/input.inrenamed

The content is the same.

test/interactive014/run → test/interactive014/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none interactive014.idr < input
2+${IDRIS:-idris} $@ --quiet --port none interactive014.idr < input.in
33rm -f *.ibc
test/interactive015/expected → test/interactive015/expected.outrenamed

The content is the same.

test/interactive015/input → test/interactive015/input.inrenamed

The content is the same.

test/interactive015/run → test/interactive015/run.shrenamed+1−1
@@ -1,7 +1,7 @@
11#!/usr/bin/env bash
22
33cp src/interactive015.idr .
4−${IDRIS:-idris} "$@" --quiet --port none interactive015.idr < input
4+${IDRIS:-idris} "$@" --quiet --port none interactive015.idr < input.in
55
66cat interactive015.idr
77
test/interactive016/expected → test/interactive016/expected.outrenamed

The content is the same.

test/interactive016/input → test/interactive016/input.inrenamed

The content is the same.

test/interactive016/run → test/interactive016/run.shrenamed+1−1
@@ -1,7 +1,7 @@
11#!/usr/bin/env bash
22
33cp src/interactive016.idr .
4−${IDRIS:-idris} "$@" --quiet --port none interactive016.idr < input
4+${IDRIS:-idris} "$@" --quiet --port none interactive016.idr < input.in
55
66cat interactive016.idr
77
test/interactive017/expected → test/interactive017/expected.outrenamed

The content is the same.

test/interactive017/run → test/interactive017/run.shrenamed

Only the mode changed.

test/interactive018/expected → test/interactive018/expected.outrenamed

The content is the same.

test/interactive018/input → test/interactive018/input.inrenamed

The content is the same.

test/interactive018/rundeleted−3
@@ -1,3 +0,0 @@
1−#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none Top.idr < input
3−rm -f *.ibc
test/interactive018/run.shnew file+3
@@ -0,0 +1,3 @@
1+#!/usr/bin/env bash
2+${IDRIS:-idris} $@ --quiet --port none Top.idr < input.in
3+rm -f *.ibc
test/interfaces001/expected → test/interfaces001/expected.outrenamed

The content is the same.

test/interfaces001/input → test/interfaces001/input.inrenamed

The content is the same.

test/interfaces001/run → test/interfaces001/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolour --consolewidth 70 InterfaceName.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolour --consolewidth 70 InterfaceName.idr < input.in
33rm -f *.ibc
test/interfaces002/expected → test/interfaces002/expected.outrenamed

The content is the same.

test/interfaces002/run → test/interfaces002/run.shrenamed

Only the mode changed.

test/interfaces003/expected → test/interfaces003/expected.outrenamed

The content is the same.

test/interfaces003/run → test/interfaces003/run.shrenamed

Only the mode changed.

test/interfaces004/expected → test/interfaces004/expected.outrenamed

The content is the same.

test/interfaces004/run → test/interfaces004/run.shrenamed

Only the mode changed.

test/interfaces005/expected → test/interfaces005/expected.outrenamed

The content is the same.

test/interfaces005/run → test/interfaces005/run.shrenamed

Only the mode changed.

test/interfaces006/expected → test/interfaces006/expected.outrenamed

The content is the same.

test/interfaces006/run → test/interfaces006/run.shrenamed

Only the mode changed.

test/interfaces007/expected → test/interfaces007/expected.outrenamed

The content is the same.

test/interfaces007/run → test/interfaces007/run.shrenamed

Only the mode changed.

test/interfaces008/expected → test/interfaces008/expected.outrenamed

The content is the same.

test/interfaces008/run → test/interfaces008/run.shrenamed

Only the mode changed.

test/interfaces009/expected → test/interfaces009/expected.outrenamed

The content is the same.

test/interfaces009/run → test/interfaces009/run.shrenamed

Only the mode changed.

test/interfaces010/expected → test/interfaces010/expected.outrenamed

The content is the same.

test/interfaces010/run → test/interfaces010/run.shrenamed

Only the mode changed.

test/interpret001/expected → test/interpret001/expected.outrenamed

The content is the same.

test/interpret001/input → test/interpret001/input.inrenamed

The content is the same.

test/interpret001/run → test/interpret001/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolour double-echo.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolour double-echo.idr < input.in
33rm -f *.ibc
test/interpret002/expected → test/interpret002/expected.outrenamed

The content is the same.

test/interpret002/input → test/interpret002/input.inrenamed

The content is the same.

test/interpret002/run → test/interpret002/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolour file-error.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolour file-error.idr < input.in
33rm -f *.ibc
test/interpret003/expected → test/interpret003/expected.outrenamed

The content is the same.

test/interpret003/input → test/interpret003/input.inrenamed

The content is the same.

test/interpret003/run → test/interpret003/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none --nocolour interpret003.idr < input
2+${IDRIS:-idris} $@ --quiet --port none --nocolour interpret003.idr < input.in
33rm -f *.ibc
test/io001/expected → test/io001/expected.outrenamed

The content is the same.

test/io001/run → test/io001/run.shrenamed

Only the mode changed.

test/io002/expected → test/io002/expected.outrenamed

The content is the same.

test/io002/run → test/io002/run.shrenamed

Only the mode changed.

test/io003/expected → test/io003/expected.outrenamed

The content is the same.

test/io003/run → test/io003/run.shrenamed

Only the mode changed.

test/layout001/expected → test/layout001/expected.outrenamed

The content is the same.

test/layout001/run → test/layout001/run.shrenamed

Only the mode changed.

test/literate001/expected → test/literate001/expected.outrenamed

The content is the same.

test/literate001/run → test/literate001/run.shrenamed

Only the mode changed.

test/meta001/expected → test/meta001/expected.outrenamed

The content is the same.

test/meta001/run → test/meta001/run.shrenamed

Only the mode changed.

test/meta002/expected → test/meta002/expected.outrenamed

The content is the same.

test/meta002/run → test/meta002/run.shrenamed

Only the mode changed.

test/meta003/expected → test/meta003/expected.outrenamed

The content is the same.

test/meta003/run → test/meta003/run.shrenamed

Only the mode changed.

test/meta004/expected → test/meta004/expected.outrenamed

The content is the same.

test/meta004/run → test/meta004/run.shrenamed

Only the mode changed.

test/pkg001/expected → test/pkg001/expected.outrenamed

The content is the same.

test/pkg001/run → test/pkg001/run.shrenamed

Only the mode changed.

test/pkg001/test-pkg.ipkg+3−3
@@ -12,6 +12,6 @@ license = BSD3 but see LICENSE for more information
1212brief = "This is a test package."
1313readme = README.md
1414version = 1234
15−homepage = http://www.idris-lang.org
16−sourceloc = http://ww.github.com/idris-lang/Idris-Dev
17−bugtracker = http://ww.github.com/idris-lang/Idris-Dev/issues
15+homepage = https://www.idris-lang.org
16+sourceloc = https://www.github.com/idris-lang/Idris-Dev
17+bugtracker = https://www.github.com/idris-lang/Idris-Dev/issues
test/pkg002/expected → test/pkg002/expected.outrenamed

The content is the same.

test/pkg002/run → test/pkg002/run.shrenamed

Only the mode changed.

test/pkg003/expected → test/pkg003/expected.outrenamed

The content is the same.

test/pkg003/run → test/pkg003/run.shrenamed

Only the mode changed.

test/pkg004/expected → test/pkg004/expected.outrenamed

The content is the same.

test/pkg004/run → test/pkg004/run.shrenamed

Only the mode changed.

test/pkg005/expected → test/pkg005/expected.outrenamed

The content is the same.

test/pkg005/run → test/pkg005/run.shrenamed

Only the mode changed.

test/pkg006/expected → test/pkg006/expected.outrenamed

The content is the same.

test/pkg006/run → test/pkg006/run.shrenamed

Only the mode changed.

test/pkg007/expected → test/pkg007/expected.outrenamed

The content is the same.

test/pkg007/input → test/pkg007/input.inrenamed

The content is the same.

test/pkg007/run → test/pkg007/run.shrenamed+1−1
@@ -2,6 +2,6 @@
22cd toy
33${IDRIS:-idris} $@ --build toy.ipkg --ibcsubdir ../ibcout
44cd ../ibcout
5−${IDRIS:-idris} $@ --quiet < ../input
5+${IDRIS:-idris} $@ --quiet < ../input.in
66cd ..
77rm -rf ibcout
test/pkg008/expected → test/pkg008/expected.outrenamed

The content is the same.

test/pkg008/run → test/pkg008/run.shrenamed

Only the mode changed.

test/pkg009/expected → test/pkg009/expected.outrenamed

The content is the same.

test/pkg009/run → test/pkg009/run.shrenamed

Only the mode changed.

test/pkg010/expecteddeleted−31
@@ -1,31 +0,0 @@
1−Uncaught error: user error (wrongopts.ipkg:4:1:
2− |
3−4 | <empty line>
4− | ^
5−Invalid option `-total'
6−
7−Usage: ([--nobanner] | [-q|--quiet] | [--ide-mode] | [--ide-mode-socket] |
8− [--client ARG] | [--log LEVEL] | [--logging-categories CATS] |
9− [--nobasepkgs] | [--noprelude] | [--nobuiltins] | [--check] |
10− [-o|--output FILE] | [--interface] | [--typeintype] | [--total] |
11− [--partial] | [--warnpartial] | [--warnreach] | [--warnipkg] |
12− [--nocoverage] | [--errorcontext] | [--info] | [--listlogcats] |
13− [--link] | [--listlibs] | [--libdir] | [--docdir] | [--include] | [--V2]
14− | [--V1] | [-V|--V0|--verbose] | [--ibcsubdir FILE] |
15− [-i|--idrispath ARG] | [--sourcepath ARG] | [--warn] |
16− [-p|--package ARG] | [--port PORT] | [--build IPKG] | [--install IPKG] |
17− [--repl IPKG] | [--clean IPKG] | [--mkdoc IPKG] | [--installdoc IPKG] |
18− [--checkpkg IPKG] | [--testpkg IPKG] | [--indent-with INDENT] |
19− [--indent-clause INDENT] | [--bytecode ARG] | [-S|--codegenonly] |
20− [-c|--compileonly] | [--dumpdefuns ARG] | [--dumpcases ARG] |
21− [--codegen TARGET] | [--portable-codegen TARGET] | [--cg-opt ARG] |
22− [-e|--eval EXPR] | [--execute] | [--exec EXPR] | [-X|--extension EXT] |
23− [--O3] | [--O2] | [--O1] | [--O0] | [--partial-eval] |
24− [--no-partial-eval] |
25− [--optimise-nat-like-types|--optimize-nat-like-types] |
26− [--no-optimise-nat-like-types|--no-optimize-nat-like-types] |
27− [-O|--level ARG] | [--target TRIPLE] | [--cpu CPU] | [--color|--colour]
28− | [--nocolor|--nocolour] | [--consolewidth WIDTH] | [--highlight] |
29− [--no-tactic-deprecation-warnings] |
30− [--allow-capitalized-pattern-variables]) [FILES] [-v|--version]
31−)
test/pkg010/expected.outnew file+29
@@ -0,0 +1,29 @@
1+Uncaught error: user error (wrongopts.ipkg:4:1:
2+ |
3+4 | <empty line>
4+ | ^
5+Invalid option `-total'
6+
7+Usage: [--nobanner | (-q|--quiet) | --ide-mode | --ide-mode-socket |
8+ --client ARG | --log LEVEL | --logging-categories CATS |
9+ --nobasepkgs | --noprelude | --nobuiltins | --check |
10+ (-o|--output FILE) | --interface | --typeintype | --total |
11+ --partial | --warnpartial | --warnreach | --warnipkg | --nocoverage |
12+ --errorcontext | --info | --listlogcats | --link | --listlibs |
13+ --libdir | --docdir | --include | --V2 | --V1 | (-V|--V0|--verbose) |
14+ --ibcsubdir FILE | (-i|--idrispath ARG) | --sourcepath ARG | --warn |
15+ (-p|--package ARG) | --port PORT | --build IPKG | --install IPKG |
16+ --repl IPKG | --clean IPKG | --mkdoc IPKG | --installdoc IPKG |
17+ --checkpkg IPKG | --testpkg IPKG | --indent-with INDENT |
18+ --indent-clause INDENT | --bytecode ARG | (-S|--codegenonly) |
19+ (-c|--compileonly) | --dumpdefuns ARG | --dumpcases ARG |
20+ --codegen TARGET | --portable-codegen TARGET | --cg-opt ARG |
21+ (-e|--eval EXPR) | --execute | --exec EXPR | (-X|--extension EXT) |
22+ --O3 | --O2 | --O1 | --O0 | --partial-eval | --no-partial-eval |
23+ (--optimise-nat-like-types|--optimize-nat-like-types) |
24+ (--no-optimise-nat-like-types|--no-optimize-nat-like-types) |
25+ (-O|--level ARG) | --target TRIPLE | --cpu CPU | (--color|--colour) |
26+ (--nocolor|--nocolour) | --consolewidth WIDTH | --highlight |
27+ --no-tactic-deprecation-warnings |
28+ --allow-capitalized-pattern-variables] [FILES] [-v|--version]
29+)
test/pkg010/run → test/pkg010/run.shrenamed

Only the mode changed.

test/prelude001/expected → test/prelude001/expected.outrenamed

The content is the same.

test/prelude001/run → test/prelude001/run.shrenamed

Only the mode changed.

test/primitives001/expected → test/primitives001/expected.outrenamed

The content is the same.

test/primitives001/input → test/primitives001/input.inrenamed

The content is the same.

test/primitives001/run → test/primitives001/run.shrenamed+1−1
@@ -2,5 +2,5 @@
22${IDRIS:-idris} $@ test005.idr -o test005
33./test005
44${IDRIS:-idris} $@ substring.idr -o substring
5−./substring < input
5+./substring < input.in
66rm -f test005 substring *.ibc
test/primitives002/expected → test/primitives002/expected.outrenamed

The content is the same.

test/primitives002/run → test/primitives002/run.shrenamed

Only the mode changed.

test/primitives003/expected → test/primitives003/expected.outrenamed

The content is the same.

test/primitives003/run → test/primitives003/run.shrenamed

Only the mode changed.

test/primitives004-disabled/expected → test/primitives004-disabled/expected.outrenamed

The content is the same.

test/primitives004-disabled/run → test/primitives004-disabled/run.shrenamed

Only the mode changed.

test/primitives005/expected → test/primitives005/expected.outrenamed

The content is the same.

test/primitives005/run → test/primitives005/run.shrenamed

The content is the same.

test/primitives006/expected → test/primitives006/expected.outrenamed

The content is the same.

test/primitives006/run → test/primitives006/run.shrenamed

Only the mode changed.

test/proof001/expected → test/proof001/expected.outrenamed

The content is the same.

test/proof001/run → test/proof001/run.shrenamed

Only the mode changed.

test/proof002/expected → test/proof002/expected.outrenamed

The content is the same.

test/proof002/run → test/proof002/run.shrenamed

Only the mode changed.

test/proof003/expected → test/proof003/expected.outrenamed

The content is the same.

test/proof003/run → test/proof003/run.shrenamed

Only the mode changed.

test/proof004/expected → test/proof004/expected.outrenamed

The content is the same.

test/proof004/run → test/proof004/run.shrenamed

Only the mode changed.

test/proof005/expected → test/proof005/expected.outrenamed

The content is the same.

test/proof005/run → test/proof005/run.shrenamed

Only the mode changed.

test/proof006/expected → test/proof006/expected.outrenamed

The content is the same.

test/proof006/run → test/proof006/run.shrenamed

Only the mode changed.

test/proof007/expected → test/proof007/expected.outrenamed

The content is the same.

test/proof007/run → test/proof007/run.shrenamed

Only the mode changed.

test/proof008/expected → test/proof008/expected.outrenamed

The content is the same.

test/proof008/run → test/proof008/run.shrenamed

Only the mode changed.

test/proof009/expected → test/proof009/expected.outrenamed

The content is the same.

test/proof009/input → test/proof009/input.inrenamed

The content is the same.

test/proof009/run → test/proof009/run.shrenamed+1−1
@@ -1,3 +1,3 @@
11#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --consolewidth 70 --quiet --port none proof009.idr < input
2+${IDRIS:-idris} $@ --consolewidth 70 --quiet --port none proof009.idr < input.in
33rm -f *.ibc
test/proof010/expected → test/proof010/expected.outrenamed

The content is the same.

test/proof010/run → test/proof010/run.shrenamed

Only the mode changed.

test/proof011/expected → test/proof011/expected.outrenamed

The content is the same.

test/proof011/run → test/proof011/run.shrenamed

Only the mode changed.

test/proofsearch001/expected → test/proofsearch001/expected.outrenamed

The content is the same.

test/proofsearch001/run → test/proofsearch001/run.shrenamed

Only the mode changed.

test/proofsearch002/expected → test/proofsearch002/expected.outrenamed

The content is the same.

test/proofsearch002/run → test/proofsearch002/run.shrenamed

Only the mode changed.

test/proofsearch003/expected → test/proofsearch003/expected.outrenamed

The content is the same.

test/proofsearch003/run → test/proofsearch003/run.shrenamed

Only the mode changed.

test/pruviloj001/expected → test/pruviloj001/expected.outrenamed

The content is the same.

test/pruviloj001/run → test/pruviloj001/run.shrenamed

Only the mode changed.

test/quasiquote001/expected → test/quasiquote001/expected.outrenamed

The content is the same.

test/quasiquote001/run → test/quasiquote001/run.shrenamed

Only the mode changed.

test/quasiquote002/expected → test/quasiquote002/expected.outrenamed

The content is the same.

test/quasiquote002/run → test/quasiquote002/run.shrenamed

Only the mode changed.

test/quasiquote003/expected → test/quasiquote003/expected.outrenamed

The content is the same.

test/quasiquote003/run → test/quasiquote003/run.shrenamed

Only the mode changed.

test/quasiquote004/expected → test/quasiquote004/expected.outrenamed

The content is the same.

test/quasiquote004/run → test/quasiquote004/run.shrenamed

Only the mode changed.

test/quasiquote005/expected → test/quasiquote005/expected.outrenamed

The content is the same.

test/quasiquote005/run → test/quasiquote005/run.shrenamed

Only the mode changed.

test/quasiquote006/expected → test/quasiquote006/expected.outrenamed

The content is the same.

test/quasiquote006/run → test/quasiquote006/run.shrenamed

Only the mode changed.

test/records001/expected → test/records001/expected.outrenamed

The content is the same.

test/records001/run → test/records001/run.shrenamed

Only the mode changed.

test/records002/expected → test/records002/expected.outrenamed

The content is the same.

test/records002/run → test/records002/run.shrenamed

Only the mode changed.

test/records003/expected → test/records003/expected.outrenamed

The content is the same.

test/records003/run → test/records003/run.shrenamed

Only the mode changed.

test/records004/expected → test/records004/expected.outrenamed

The content is the same.

test/records004/run → test/records004/run.shrenamed

Only the mode changed.

test/records005/expected → test/records005/expected.outrenamed

The content is the same.

test/records005/run → test/records005/run.shrenamed

Only the mode changed.

test/reg001/expected → test/reg001/expected.outrenamed

The content is the same.

test/reg001/run → test/reg001/run.shrenamed

Only the mode changed.

test/reg002/expected → test/reg002/expected.outrenamed

The content is the same.

test/reg002/run → test/reg002/run.shrenamed

Only the mode changed.

test/reg004/expected → test/reg004/expected.outrenamed

The content is the same.

test/reg004/run → test/reg004/run.shrenamed

Only the mode changed.

test/reg005/expected → test/reg005/expected.outrenamed

The content is the same.

test/reg005/run → test/reg005/run.shrenamed

Only the mode changed.

test/reg007/expected → test/reg007/expected.outrenamed

The content is the same.

test/reg007/run → test/reg007/run.shrenamed

Only the mode changed.

test/reg013/expected → test/reg013/expected.outrenamed

The content is the same.

test/reg013/run → test/reg013/run.shrenamed

Only the mode changed.

test/reg016/expected → test/reg016/expected.outrenamed

The content is the same.

test/reg016/run → test/reg016/run.shrenamed

Only the mode changed.

test/reg017/expected → test/reg017/expected.outrenamed

The content is the same.

test/reg017/run → test/reg017/run.shrenamed

Only the mode changed.

test/reg020/expected → test/reg020/expected.outrenamed

The content is the same.

test/reg020/run → test/reg020/run.shrenamed

Only the mode changed.

test/reg024/expected → test/reg024/expected.outrenamed

The content is the same.

test/reg024/run → test/reg024/run.shrenamed

Only the mode changed.

test/reg025/expected → test/reg025/expected.outrenamed

The content is the same.

test/reg025/run → test/reg025/run.shrenamed

Only the mode changed.

test/reg027/expected → test/reg027/expected.outrenamed

The content is the same.

test/reg027/run → test/reg027/run.shrenamed

Only the mode changed.

test/reg029/expected → test/reg029/expected.outrenamed

The content is the same.

test/reg029/run → test/reg029/run.shrenamed

Only the mode changed.

test/reg031/expected → test/reg031/expected.outrenamed

The content is the same.

test/reg031/run → test/reg031/run.shrenamed

Only the mode changed.

test/reg032/expected → test/reg032/expected.outrenamed

The content is the same.

test/reg032/run → test/reg032/run.shrenamed

Only the mode changed.

test/reg039/expected → test/reg039/expected.outrenamed

The content is the same.

test/reg039/run → test/reg039/run.shrenamed

Only the mode changed.

test/reg040/expected → test/reg040/expected.outrenamed

The content is the same.

test/reg040/run → test/reg040/run.shrenamed

Only the mode changed.

test/reg041/expected → test/reg041/expected.outrenamed

The content is the same.

test/reg041/run → test/reg041/run.shrenamed

Only the mode changed.

test/reg042/expected → test/reg042/expected.outrenamed

The content is the same.

test/reg042/run → test/reg042/run.shrenamed

Only the mode changed.

test/reg045/expected → test/reg045/expected.outrenamed

The content is the same.

test/reg045/run → test/reg045/run.shrenamed

Only the mode changed.

test/reg048/expected → test/reg048/expected.outrenamed

The content is the same.

test/reg048/run → test/reg048/run.shrenamed

Only the mode changed.

test/reg051-disabled/expected → test/reg051-disabled/expected.outrenamed

The content is the same.

test/reg051-disabled/run → test/reg051-disabled/run.shrenamed

Only the mode changed.

test/reg052/expected → test/reg052/expected.outrenamed

The content is the same.

test/reg052/run → test/reg052/run.shrenamed

Only the mode changed.

test/reg067/expected → test/reg067/expected.outrenamed

The content is the same.

test/reg067/run → test/reg067/run.shrenamed

Only the mode changed.

test/reg075/expected → test/reg075/expected.outrenamed

The content is the same.

test/reg075/input → test/reg075/input.inrenamed

The content is the same.

test/reg075/rundeleted−3
@@ -1,3 +0,0 @@
1−#!/usr/bin/env bash
2−${IDRIS:-idris} $@ --quiet --port none reg075.idr < input
3−rm -f *.ibc
test/reg075/run.shnew file+3
@@ -0,0 +1,3 @@
1+#!/usr/bin/env bash
2+${IDRIS:-idris} $@ --quiet --port none reg075.idr < input.in
3+rm -f *.ibc
test/reg076/expected → test/reg076/expected.outrenamed

The content is the same.

test/reg076/input → test/reg076/input.inrenamed

The content is the same.

test/reg076/run → test/reg076/run.shrenamed

Only the mode changed.

test/reg077/expected → test/reg077/expected.outrenamed

The content is the same.

test/reg077/run → test/reg077/run.shrenamed

Only the mode changed.

test/regression001/expected → test/regression001/expected.outrenamed

The content is the same.

test/regression001/run → test/regression001/run.shrenamed

Only the mode changed.

test/regression002/expected → test/regression002/expected.outrenamed

The content is the same.

test/regression002/run → test/regression002/run.shrenamed

Only the mode changed.

test/regression003/expected → test/regression003/expected.outrenamed

The content is the same.

test/regression003/run → test/regression003/run.shrenamed

Only the mode changed.

test/sourceLocation001/expected → test/sourceLocation001/expected.outrenamed

The content is the same.

test/sourceLocation001/run → test/sourceLocation001/run.shrenamed

Only the mode changed.

test/st001/expected → test/st001/expected.outrenamed

The content is the same.

test/st001/run → test/st001/run.shrenamed

Only the mode changed.

test/st001/test001.idr+1−1
@@ -40,7 +40,7 @@ readFileCount fh cnt =
4040
4141testFile : (ConsoleIO m, File m) => ST m () []
4242testFile = with ST do
43− Right fileHandle <- open "testFile" Read
43+ Right fileHandle <- open "testFile.in" Read
4444 | Left ferr => do putStrLn (show ferr)
4545 pure ()
4646 count <- new 0
test/st001/testFile → test/st001/testFile.inrenamed

The content is the same.

test/st002/expected → test/st002/expected.outrenamed

The content is the same.

test/st002/run → test/st002/run.shrenamed

Only the mode changed.

test/st002/test002.idr+1−1
@@ -40,7 +40,7 @@ readFileCount fh cnt =
4040
4141testFile : (ConsoleIO m, File m) => ST m () []
4242testFile = with ST do
43− Right fileHandle <- open "testFile" Read
43+ Right fileHandle <- open "testFile.in" Read
4444 | Left ferr => do putStrLn (show ferr)
4545 pure ()
4646 count <- new 0
test/st002/testFile → test/st002/testFile.inrenamed

The content is the same.

test/st003/expected → test/st003/expected.outrenamed

The content is the same.

test/st003/run → test/st003/run.shrenamed

Only the mode changed.

test/st003/test003.idr+1−1
@@ -7,7 +7,7 @@ import Control.ST.ImplicitCall
77
88testFile : (ConsoleIO m, File m) => ST m () []
99testFile = with ST do
10− Right str <- readFile "testFile"
10+ Right str <- readFile "testFile.in"
1111 | Left ferr => do putStrLn (show ferr)
1212 pure ()
1313 putStrLn str
test/st003/testFile → test/st003/testFile.inrenamed

The content is the same.

test/st004/expected → test/st004/expected.outrenamed

The content is the same.

test/st004/run → test/st004/run.shrenamed

Only the mode changed.

test/st005/expected → test/st005/expected.outrenamed

The content is the same.

test/st005/run → test/st005/run.shrenamed

Only the mode changed.

test/st006/expected → test/st006/expected.outrenamed

The content is the same.

test/st006/run → test/st006/run.shrenamed

Only the mode changed.

test/st007/expected → test/st007/expected.outrenamed

The content is the same.

test/st007/run → test/st007/run.shrenamed

Only the mode changed.

test/sugar001/expected → test/sugar001/expected.outrenamed

The content is the same.

test/sugar001/run → test/sugar001/run.shrenamed

Only the mode changed.

test/sugar002/expected → test/sugar002/expected.outrenamed

The content is the same.

test/sugar002/run → test/sugar002/run.shrenamed

Only the mode changed.

test/sugar003/expected → test/sugar003/expected.outrenamed

The content is the same.

test/sugar003/run → test/sugar003/run.shrenamed

Only the mode changed.

test/sugar004/expected → test/sugar004/expected.outrenamed

The content is the same.

test/sugar004/run → test/sugar004/run.shrenamed

Only the mode changed.

test/sugar005/expected → test/sugar005/expected.outrenamed

The content is the same.

test/sugar005/run → test/sugar005/run.shrenamed

Only the mode changed.

test/syntax001/expected → test/syntax001/expected.outrenamed

The content is the same.

test/syntax001/run → test/syntax001/run.shrenamed

Only the mode changed.

test/syntax002/expected → test/syntax002/expected.outrenamed

The content is the same.

test/syntax002/run → test/syntax002/run.shrenamed

Only the mode changed.

test/tactics001/expected → test/tactics001/expected.outrenamed

The content is the same.

test/tactics001/run → test/tactics001/run.shrenamed

Only the mode changed.

test/totality001/expected → test/totality001/expected.outrenamed

The content is the same.

test/totality001/run → test/totality001/run.shrenamed

Only the mode changed.

test/totality002/expected → test/totality002/expected.outrenamed

The content is the same.

test/totality002/run → test/totality002/run.shrenamed

Only the mode changed.

test/totality003/expected → test/totality003/expected.outrenamed

The content is the same.

test/totality003/run → test/totality003/run.shrenamed

Only the mode changed.

test/totality004/expected → test/totality004/expected.outrenamed

The content is the same.

test/totality004/run → test/totality004/run.shrenamed

Only the mode changed.

test/totality005/expected → test/totality005/expected.outrenamed

The content is the same.

test/totality005/run → test/totality005/run.shrenamed

Only the mode changed.

test/totality006/expected → test/totality006/expected.outrenamed

The content is the same.

test/totality006/run → test/totality006/run.shrenamed

Only the mode changed.

test/totality007/expected → test/totality007/expected.outrenamed

The content is the same.

test/totality007/run → test/totality007/run.shrenamed

Only the mode changed.

test/totality008/expected → test/totality008/expected.outrenamed

The content is the same.

test/totality008/run → test/totality008/run.shrenamed

Only the mode changed.

test/totality009/expected → test/totality009/expected.outrenamed

The content is the same.

test/totality009/run → test/totality009/run.shrenamed

Only the mode changed.

test/totality010/expected → test/totality010/expected.outrenamed

The content is the same.

test/totality010/run → test/totality010/run.shrenamed

Only the mode changed.

test/totality011/expected → test/totality011/expected.outrenamed

The content is the same.

test/totality011/run → test/totality011/run.shrenamed

Only the mode changed.

test/totality012/expected → test/totality012/expected.outrenamed

The content is the same.

test/totality012/run → test/totality012/run.shrenamed

Only the mode changed.

test/totality013/expected → test/totality013/expected.outrenamed

The content is the same.

test/totality013/run → test/totality013/run.shrenamed

Only the mode changed.

test/totality014/expected → test/totality014/expected.outrenamed

The content is the same.

test/totality014/run → test/totality014/run.shrenamed

Only the mode changed.

test/totality015/expected → test/totality015/expected.outrenamed

The content is the same.

test/totality015/run → test/totality015/run.shrenamed

Only the mode changed.

test/totality016/expected → test/totality016/expected.outrenamed

The content is the same.

test/totality016/run → test/totality016/run.shrenamed

Only the mode changed.

test/totality017/expected → test/totality017/expected.outrenamed

The content is the same.

test/totality017/run → test/totality017/run.shrenamed

Only the mode changed.

test/totality018/expected → test/totality018/expected.outrenamed

The content is the same.

test/totality018/run → test/totality018/run.shrenamed

Only the mode changed.

test/totality019/expected → test/totality019/expected.outrenamed

The content is the same.

test/totality019/run → test/totality019/run.shrenamed

Only the mode changed.

test/totality020/expected → test/totality020/expected.outrenamed

The content is the same.

test/totality020/run → test/totality020/run.shrenamed

Only the mode changed.

test/totality021/expected → test/totality021/expected.outrenamed

The content is the same.

test/totality021/run → test/totality021/run.shrenamed

Only the mode changed.

test/totality022/expected → test/totality022/expected.outrenamed

The content is the same.

test/totality022/run → test/totality022/run.shrenamed

Only the mode changed.

test/totality023/expected → test/totality023/expected.outrenamed

The content is the same.

test/totality023/run → test/totality023/run.shrenamed

Only the mode changed.

test/totality024/expected → test/totality024/expected.outrenamed

The content is the same.

test/totality024/run → test/totality024/run.shrenamed

Only the mode changed.

test/totality025/expected → test/totality025/expected.outrenamed

The content is the same.

test/totality025/run → test/totality025/run.shrenamed

Only the mode changed.

test/totality026/expected → test/totality026/expected.outrenamed

The content is the same.

test/totality026/run → test/totality026/run.shrenamed

Only the mode changed.

test/tutorial001/expected → test/tutorial001/expected.outrenamed

The content is the same.

test/tutorial001/run → test/tutorial001/run.shrenamed

Only the mode changed.

test/tutorial002/expected → test/tutorial002/expected.outrenamed

The content is the same.

test/tutorial002/run → test/tutorial002/run.shrenamed

Only the mode changed.

test/tutorial003/expected → test/tutorial003/expected.outrenamed

The content is the same.

test/tutorial003/run → test/tutorial003/run.shrenamed

Only the mode changed.

test/tutorial004/expected → test/tutorial004/expected.outrenamed

The content is the same.

test/tutorial004/run → test/tutorial004/run.shrenamed

Only the mode changed.

test/tutorial005/expected → test/tutorial005/expected.outrenamed

The content is the same.

test/tutorial005/run → test/tutorial005/run.shrenamed

Only the mode changed.

test/tutorial006/expected → test/tutorial006/expected.outrenamed

The content is the same.

test/tutorial006/run → test/tutorial006/run.shrenamed

Only the mode changed.

test/tutorial007/expected → test/tutorial007/expected.outrenamed

The content is the same.

test/tutorial007/run → test/tutorial007/run.shrenamed

Only the mode changed.

test/unique001/expected → test/unique001/expected.outrenamed

The content is the same.

test/unique001/run → test/unique001/run.shrenamed

Only the mode changed.

test/unique004/expected → test/unique004/expected.outrenamed

The content is the same.

test/unique004/run → test/unique004/run.shrenamed

Only the mode changed.

test/universes001/expected → test/universes001/expected.outrenamed

The content is the same.

test/universes001/run → test/universes001/run.shrenamed

Only the mode changed.

test/universes002/expected → test/universes002/expected.outrenamed

The content is the same.

test/universes002/run → test/universes002/run.shrenamed

Only the mode changed.

test/views001/expected → test/views001/expected.outrenamed

The content is the same.

test/views001/run → test/views001/run.shrenamed

Only the mode changed.

test/views002/expected → test/views002/expected.outrenamed

The content is the same.

test/views002/run → test/views002/run.shrenamed

Only the mode changed.

test/views003/expected → test/views003/expected.outrenamed

The content is the same.

test/views003/run → test/views003/run.shrenamed

Only the mode changed.