on 9bffc19 help sign in
625 files changed+543−4994
since splitsnapshots
unifiedsplit
.travis.yml+35−53 CHANGELOG.md−3 INSTALL.md+2−11 Makefile+4−4 README.md−3 Setup.hs+33 appveyor.yml+3−3 docs/conf.py+2−3 docs/effects/introduction.rst+1−2 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/tokenise.png docs/image/tokenise.svg−740 docs/index.rst−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/propositional.rst+1−1 docs/reference/codegen.rst+4−4 docs/reference/misc.rst+5−5 idris-tutorial.pdf idris.cabal+47−101 libs/base/Control/Isomorphism.idr+23−20 libs/contrib/Control/Algebra/Laws.idr+80−128 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+29−155 libs/contrib/contrib.ipkg+1−1 libs/prelude/Prelude/File.idr+2−3 libs/prelude/Prelude/Nat.idr+61−32 rts/idris_bitstring.c+2 rts/idris_rts.c+10 rts/idris_rts.h+4 rts/idris_stdfgn.c+2−12 rts/idris_stdfgn.h+1−4 rts/idris_utf8.c+1 src/Idris/CmdOptions.hs+2−3 src/Idris/Core/CaseTree.hs+1−1 src/Idris/Core/TT.hs−6 src/Idris/Parser/Stack.hs+2−16 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+24−1 test/README.md+5−5 test/TestRun.hs+2−2 test/base001/expected.out → test/base001/expected test/base001/run.sh → test/base001/run+1−1 test/basic001/expected.out → test/basic001/expected test/basic001/run.sh → test/basic001/run test/basic002/expected.out → test/basic002/expected test/basic002/run.sh → test/basic002/run test/basic003/expected.out → test/basic003/expected test/basic003/run.sh → test/basic003/run test/basic004/expected.out → test/basic004/expected test/basic004/run.sh → test/basic004/run test/basic005/expected.out → test/basic005/expected test/basic005/run.sh → test/basic005/run test/basic006/expected.out → test/basic006/expected test/basic006/run.sh → test/basic006/run test/basic007/expected.out → test/basic007/expected test/basic007/run.sh → test/basic007/run test/basic008/expected.out → test/basic008/expected test/basic008/run.sh → test/basic008/run test/basic009/expected.out → test/basic009/expected test/basic009/run.sh → test/basic009/run test/basic010/expected.out → test/basic010/expected test/basic010/run.sh → test/basic010/run test/basic011/expected.out → test/basic011/expected test/basic011/run.sh → test/basic011/run test/basic012/expected.out → test/basic012/expected test/basic012/run.sh → test/basic012/run test/basic013/expected.out → test/basic013/expected test/basic013/run.sh → test/basic013/run test/basic014/expected.out → test/basic014/expected test/basic014/run.sh → test/basic014/run test/basic015/expected.out → test/basic015/expected test/basic015/run.sh → test/basic015/run test/basic016/expected.out → test/basic016/expected test/basic016/run.sh → test/basic016/run test/basic017/expected.out → test/basic017/expected test/basic017/run.sh → test/basic017/run test/basic018/expected.out → test/basic018/expected test/basic018/run.sh → test/basic018/run test/basic019/expected.out → test/basic019/expected test/basic019/run.sh → test/basic019/run test/basic020/expected.out → test/basic020/expected test/basic020/run.sh → test/basic020/run test/basic021/expected.out → test/basic021/expected test/basic021/run.sh → test/basic021/run test/basic022/expected.out → test/basic022/expected test/basic022/run.sh → test/basic022/run test/basic023/expected.out → test/basic023/expected test/basic023/run.sh → test/basic023/run test/basic024/expected.out → test/basic024/expected test/basic024/input.in → test/basic024/input test/basic024/run.sh → test/basic024/run+1−1 test/basic025/expected.out → test/basic025/expected test/basic025/input.in → test/basic025/input test/basic025/run.sh → test/basic025/run+2−2 test/basic026/expected.out → test/basic026/expected test/basic026/run.sh → test/basic026/run test/bignum001/expected.out → test/bignum001/expected test/bignum001/run.sh → test/bignum001/run test/bignum002/expected.out → test/bignum002/expected test/bignum002/run.sh → test/bignum002/run test/bignum003/expected.out → test/bignum003/expected test/bignum003/run.sh → test/bignum003/run test/bounded001/expected.out → test/bounded001/expected test/bounded001/run.sh → test/bounded001/run test/buffer001/expected.out → test/buffer001/expected test/buffer001/run.sh → test/buffer001/run test/buffer002/expected.out → test/buffer002/expected test/buffer002/run.sh → test/buffer002/run test/contrib001/expected.out → test/contrib001/expected test/contrib001/run.sh → test/contrib001/run test/corecords001/expected.out → test/corecords001/expected test/corecords001/run.sh → test/corecords001/run test/corecords002/expected.out → test/corecords002/expected test/corecords002/run.sh → test/corecords002/run test/delab001/expected.out → test/delab001/expected test/delab001/input.in → test/delab001/input test/delab001/run.sh → test/delab001/run+1−1 test/directives001/expected.out → test/directives001/expected test/directives001/run.sh → test/directives001/run test/directives002/expected.out → test/directives002/expected test/directives002/run.sh → test/directives002/run test/directives003/expected.out → test/directives003/expected test/directives003/run.sh → test/directives003/run test/disambig002/expected.out → test/disambig002/expected test/disambig002/run.sh → test/disambig002/run test/docs001/expected.out → test/docs001/expected test/docs001/input.in → test/docs001/input test/docs001/run.sh → test/docs001/run+1−1 test/docs002/expected.out → test/docs002/expected test/docs002/input.in → test/docs002/input test/docs002/run.sh → test/docs002/run+1−1 test/docs003/expected.out → test/docs003/expected test/docs003/input.in → test/docs003/input test/docs003/run.sh → test/docs003/run+1−1 test/docs004/expected.out → test/docs004/expected test/docs004/input.in → test/docs004/input test/docs004/run.sh → test/docs004/run+1−1 test/docs005/expected.out → test/docs005/expected test/docs005/input.in → test/docs005/input test/docs005/run.sh → test/docs005/run+1−1 test/docs006/expected.out → test/docs006/expected test/docs006/input.in → test/docs006/input test/docs006/run.sh → test/docs006/run+1−1 test/dsl001/expected.out → test/dsl001/expected test/dsl001/input.in → test/dsl001/input test/dsl001/run.sh → test/dsl001/run+1−1 test/dsl002/expected.out → test/dsl002/expected test/dsl002/run.sh → test/dsl002/run test/dsl002/test.in → test/dsl002/test test/dsl002/test014.idr+1−1 test/dsl003/expected.out → test/dsl003/expected test/dsl003/run.sh → test/dsl003/run test/dsl004/expected.out → test/dsl004/expected test/dsl004/run.sh → test/dsl004/run test/effects001/expected.out → test/effects001/expected test/effects001/run.sh → test/effects001/run test/effects001/test021.idr+1−1 test/effects001/testFile.in → test/effects001/testFile test/effects002/expected.out → test/effects002/expected test/effects002/run.sh → test/effects002/run test/effects003/expected.out → test/effects003/expected test/effects003/input.in → test/effects003/input test/effects003/run.sh → test/effects003/run+1−1 test/effects004/expected.out → test/effects004/expected test/effects004/input.in → test/effects004/input test/effects004/run.sh → test/effects004/run+1−1 test/effects005/expected.out → test/effects005/expected test/effects005/run.sh → test/effects005/run test/error001/expected.out → test/error001/expected test/error001/run.sh → test/error001/run test/error002/expected.out → test/error002/expected test/error002/run.sh → test/error002/run test/error003/expected.out → test/error003/expected test/error003/run.sh → test/error003/run test/error004/expected.out → test/error004/expected test/error004/run.sh → test/error004/run test/error005/expected.out → test/error005/expected test/error005/run.sh → test/error005/run test/error006/expected.out → test/error006/expected test/error006/run.sh → test/error006/run test/error007/expected.out → test/error007/expected test/error007/run.sh → test/error007/run test/error008/expected.out → test/error008/expected test/error008/run.sh → test/error008/run test/error009/expected.out → test/error009/expected test/error009/run.sh → test/error009/run test/ffi001/expected.out → test/ffi001/expected test/ffi001/run.sh → test/ffi001/run test/ffi002/expected.out → test/ffi002/expected test/ffi002/run.sh → test/ffi002/run test/ffi003/expected.out → test/ffi003/expected test/ffi003/input.in → test/ffi003/input test/ffi003/run.sh → test/ffi003/run+1−1 test/ffi004/expected.out → test/ffi004/expected test/ffi004/run.sh → test/ffi004/run test/ffi005/expected.out → test/ffi005/expected test/ffi005/run.sh → test/ffi005/run test/ffi006/expected.out → test/ffi006/expected test/ffi006/run.sh → test/ffi006/run test/ffi007/expected.out → test/ffi007/expected test/ffi007/run.sh → test/ffi007/run test/ffi008/expected.out → test/ffi008/expected test/ffi008/run.sh → test/ffi008/run test/ffi009/expected.out → test/ffi009/expected test/ffi009/run.sh → test/ffi009/run test/ffi010/expected.out → test/ffi010/expected test/ffi010/run.sh → test/ffi010/run test/ffi011/expected.out → test/ffi011/expected test/ffi011/ffi011.js → test/ffi011/ffi011 test/ffi011/run.sh → test/ffi011/run+1−1 test/ffi012/expected.out → test/ffi012/expected test/ffi012/ffi012.js → test/ffi012/ffi012 test/ffi012/run.sh → test/ffi012/run test/ffi013/expected.out → test/ffi013/expected test/ffi013/run.sh → test/ffi013/run test/folding001/expected.out → test/folding001/expected test/folding001/run.sh → test/folding001/run test/idrisdoc001/expected.out → test/idrisdoc001/expected test/idrisdoc001/run.sh → test/idrisdoc001/run test/idrisdoc002/expected.out → test/idrisdoc002/expected test/idrisdoc002/run.sh → test/idrisdoc002/run test/idrisdoc003/expected.out → test/idrisdoc003/expected test/idrisdoc003/run.sh → test/idrisdoc003/run test/idrisdoc004/expected.out → test/idrisdoc004/expected test/idrisdoc004/run.sh → test/idrisdoc004/run test/idrisdoc005/expected.out → test/idrisdoc005/expected test/idrisdoc005/run.sh → test/idrisdoc005/run test/idrisdoc006/expected.out → test/idrisdoc006/expected test/idrisdoc006/run.sh → test/idrisdoc006/run test/idrisdoc007/expected.out → test/idrisdoc007/expected test/idrisdoc007/run.sh → test/idrisdoc007/run test/idrisdoc008/expected.out → test/idrisdoc008/expected test/idrisdoc008/run.sh → test/idrisdoc008/run test/idrisdoc009/expected.out → test/idrisdoc009/expected test/idrisdoc009/input.in → test/idrisdoc009/input test/idrisdoc009/run.sh → test/idrisdoc009/run+1−1 test/interactive001/expected.out → test/interactive001/expected test/interactive001/input.in → test/interactive001/input test/interactive001/run.sh → test/interactive001/run+1−1 test/interactive002/expected.out → test/interactive002/expected test/interactive002/input.in → test/interactive002/input test/interactive002/run.sh → test/interactive002/run+1−1 test/interactive003/expected.out → test/interactive003/expected test/interactive003/input.in → test/interactive003/input test/interactive003/run.sh → test/interactive003/run+1−1 test/interactive004/expected.out → test/interactive004/expected test/interactive004/input.in → test/interactive004/input test/interactive004/run.sh → test/interactive004/run+1−1 test/interactive005/expected.out → test/interactive005/expected test/interactive005/input.in → test/interactive005/input test/interactive005/run.sh → test/interactive005/run+1−1 test/interactive006/expected.out → test/interactive006/expected test/interactive006/input.in → test/interactive006/input test/interactive006/run.sh → test/interactive006/run+1−1 test/interactive007/expected.out → test/interactive007/expected test/interactive007/input.in → test/interactive007/input test/interactive007/run.sh → test/interactive007/run+1−1 test/interactive008/expected.out → test/interactive008/expected test/interactive008/input.in → test/interactive008/input test/interactive008/run+2 test/interactive008/run.sh−2 test/interactive009/expected.out → test/interactive009/expected test/interactive009/input.in → test/interactive009/input test/interactive009/run.sh → test/interactive009/run+1−1 test/interactive010/expected.out → test/interactive010/expected test/interactive010/input.in → test/interactive010/input test/interactive010/run.sh → test/interactive010/run+1−1 test/interactive011/expected.out → test/interactive011/expected test/interactive011/input.in → test/interactive011/input test/interactive011/run.sh → test/interactive011/run+1−1 test/interactive012/expected.out → test/interactive012/expected test/interactive012/input.in → test/interactive012/input test/interactive012/run.sh → test/interactive012/run+1−1 test/interactive013/expected.out → test/interactive013/expected test/interactive013/input.in → test/interactive013/input test/interactive013/run.sh → test/interactive013/run+1−1 test/interactive014/expected.out → test/interactive014/expected test/interactive014/input.in → test/interactive014/input test/interactive014/run.sh → test/interactive014/run+1−1 test/interactive015/expected.out → test/interactive015/expected test/interactive015/input.in → test/interactive015/input test/interactive015/run.sh → test/interactive015/run+1−1 test/interactive016/expected.out → test/interactive016/expected test/interactive016/input.in → test/interactive016/input test/interactive016/run.sh → test/interactive016/run+1−1 test/interactive017/expected.out → test/interactive017/expected test/interactive017/run.sh → test/interactive017/run test/interactive018/expected.out → test/interactive018/expected test/interactive018/input.in → test/interactive018/input test/interactive018/run+3 test/interactive018/run.sh−3 test/interfaces001/expected.out → test/interfaces001/expected test/interfaces001/input.in → test/interfaces001/input test/interfaces001/run.sh → test/interfaces001/run+1−1 test/interfaces002/expected.out → test/interfaces002/expected test/interfaces002/run.sh → test/interfaces002/run test/interfaces003/expected.out → test/interfaces003/expected test/interfaces003/run.sh → test/interfaces003/run test/interfaces004/expected.out → test/interfaces004/expected test/interfaces004/run.sh → test/interfaces004/run test/interfaces005/expected.out → test/interfaces005/expected test/interfaces005/run.sh → test/interfaces005/run test/interfaces006/expected.out → test/interfaces006/expected test/interfaces006/run.sh → test/interfaces006/run test/interfaces007/expected.out → test/interfaces007/expected test/interfaces007/run.sh → test/interfaces007/run test/interfaces008/expected.out → test/interfaces008/expected test/interfaces008/run.sh → test/interfaces008/run test/interfaces009/expected.out → test/interfaces009/expected test/interfaces009/run.sh → test/interfaces009/run test/interfaces010/expected.out → test/interfaces010/expected test/interfaces010/run.sh → test/interfaces010/run test/interpret001/expected.out → test/interpret001/expected test/interpret001/input.in → test/interpret001/input test/interpret001/run.sh → test/interpret001/run+1−1 test/interpret002/expected.out → test/interpret002/expected test/interpret002/input.in → test/interpret002/input test/interpret002/run.sh → test/interpret002/run+1−1 test/interpret003/expected.out → test/interpret003/expected test/interpret003/input.in → test/interpret003/input test/interpret003/run.sh → test/interpret003/run+1−1 test/io001/expected.out → test/io001/expected test/io001/run.sh → test/io001/run test/io002/expected.out → test/io002/expected test/io002/run.sh → test/io002/run test/io003/expected.out → test/io003/expected test/io003/run.sh → test/io003/run test/layout001/expected.out → test/layout001/expected test/layout001/run.sh → test/layout001/run test/literate001/expected.out → test/literate001/expected test/literate001/run.sh → test/literate001/run test/meta001/expected.out → test/meta001/expected test/meta001/run.sh → test/meta001/run test/meta002/expected.out → test/meta002/expected test/meta002/run.sh → test/meta002/run test/meta003/expected.out → test/meta003/expected test/meta003/run.sh → test/meta003/run test/meta004/expected.out → test/meta004/expected test/meta004/run.sh → test/meta004/run test/pkg001/expected.out → test/pkg001/expected test/pkg001/run.sh → test/pkg001/run test/pkg002/expected.out → test/pkg002/expected test/pkg002/run.sh → test/pkg002/run test/pkg003/expected.out → test/pkg003/expected test/pkg003/run.sh → test/pkg003/run test/pkg004/expected.out → test/pkg004/expected test/pkg004/run.sh → test/pkg004/run test/pkg005/expected.out → test/pkg005/expected test/pkg005/run.sh → test/pkg005/run test/pkg006/expected.out → test/pkg006/expected test/pkg006/run.sh → test/pkg006/run test/pkg007/expected.out → test/pkg007/expected test/pkg007/input.in → test/pkg007/input test/pkg007/run.sh → test/pkg007/run+1−1 test/pkg008/expected.out → test/pkg008/expected test/pkg008/run.sh → test/pkg008/run test/pkg009/expected.out → test/pkg009/expected test/pkg009/run.sh → test/pkg009/run test/pkg010/expected+31 test/pkg010/expected.out−29 test/pkg010/run.sh → test/pkg010/run test/prelude001/expected.out → test/prelude001/expected test/prelude001/run.sh → test/prelude001/run test/primitives001/expected.out → test/primitives001/expected test/primitives001/input.in → test/primitives001/input test/primitives001/run.sh → test/primitives001/run+1−1 test/primitives002/expected.out → test/primitives002/expected test/primitives002/run.sh → test/primitives002/run test/primitives003/expected.out → test/primitives003/expected test/primitives003/run.sh → test/primitives003/run test/primitives004-disabled/expected.out → test/primitives004-disabled/expected test/primitives004-disabled/run.sh → test/primitives004-disabled/run test/primitives005/expected.out → test/primitives005/expected test/primitives005/run.sh → test/primitives005/run test/primitives006/expected.out → test/primitives006/expected test/primitives006/run.sh → test/primitives006/run test/proof001/expected.out → test/proof001/expected test/proof001/run.sh → test/proof001/run test/proof002/expected.out → test/proof002/expected test/proof002/run.sh → test/proof002/run test/proof003/expected.out → test/proof003/expected test/proof003/run.sh → test/proof003/run test/proof004/expected.out → test/proof004/expected test/proof004/run.sh → test/proof004/run test/proof005/expected.out → test/proof005/expected test/proof005/run.sh → test/proof005/run test/proof006/expected.out → test/proof006/expected test/proof006/run.sh → test/proof006/run test/proof007/expected.out → test/proof007/expected test/proof007/run.sh → test/proof007/run test/proof008/expected.out → test/proof008/expected test/proof008/run.sh → test/proof008/run test/proof009/expected.out → test/proof009/expected test/proof009/input.in → test/proof009/input test/proof009/run.sh → test/proof009/run+1−1 test/proof010/expected.out → test/proof010/expected test/proof010/run.sh → test/proof010/run test/proof011/expected.out → test/proof011/expected test/proof011/run.sh → test/proof011/run test/proofsearch001/expected.out → test/proofsearch001/expected test/proofsearch001/run.sh → test/proofsearch001/run test/proofsearch002/expected.out → test/proofsearch002/expected test/proofsearch002/run.sh → test/proofsearch002/run test/proofsearch003/expected.out → test/proofsearch003/expected test/proofsearch003/run.sh → test/proofsearch003/run test/pruviloj001/expected.out → test/pruviloj001/expected test/pruviloj001/run.sh → test/pruviloj001/run test/quasiquote001/expected.out → test/quasiquote001/expected test/quasiquote001/run.sh → test/quasiquote001/run test/quasiquote002/expected.out → test/quasiquote002/expected test/quasiquote002/run.sh → test/quasiquote002/run test/quasiquote003/expected.out → test/quasiquote003/expected test/quasiquote003/run.sh → test/quasiquote003/run test/quasiquote004/expected.out → test/quasiquote004/expected test/quasiquote004/run.sh → test/quasiquote004/run test/quasiquote005/expected.out → test/quasiquote005/expected test/quasiquote005/run.sh → test/quasiquote005/run test/quasiquote006/expected.out → test/quasiquote006/expected test/quasiquote006/run.sh → test/quasiquote006/run test/records001/expected.out → test/records001/expected test/records001/run.sh → test/records001/run test/records002/expected.out → test/records002/expected test/records002/run.sh → test/records002/run test/records003/expected.out → test/records003/expected test/records003/run.sh → test/records003/run test/records004/expected.out → test/records004/expected test/records004/run.sh → test/records004/run test/records005/expected.out → test/records005/expected test/records005/run.sh → test/records005/run test/reg001/expected.out → test/reg001/expected test/reg001/run.sh → test/reg001/run test/reg002/expected.out → test/reg002/expected test/reg002/run.sh → test/reg002/run test/reg004/expected.out → test/reg004/expected test/reg004/run.sh → test/reg004/run test/reg005/expected.out → test/reg005/expected test/reg005/run.sh → test/reg005/run test/reg007/expected.out → test/reg007/expected test/reg007/run.sh → test/reg007/run test/reg013/expected.out → test/reg013/expected test/reg013/run.sh → test/reg013/run test/reg016/expected.out → test/reg016/expected test/reg016/run.sh → test/reg016/run test/reg017/expected.out → test/reg017/expected test/reg017/run.sh → test/reg017/run test/reg020/expected.out → test/reg020/expected test/reg020/run.sh → test/reg020/run test/reg024/expected.out → test/reg024/expected test/reg024/run.sh → test/reg024/run test/reg025/expected.out → test/reg025/expected test/reg025/run.sh → test/reg025/run test/reg027/expected.out → test/reg027/expected test/reg027/run.sh → test/reg027/run test/reg029/expected.out → test/reg029/expected test/reg029/run.sh → test/reg029/run test/reg031/expected.out → test/reg031/expected test/reg031/run.sh → test/reg031/run test/reg032/expected.out → test/reg032/expected test/reg032/run.sh → test/reg032/run test/reg039/expected.out → test/reg039/expected test/reg039/run.sh → test/reg039/run test/reg040/expected.out → test/reg040/expected test/reg040/run.sh → test/reg040/run test/reg041/expected.out → test/reg041/expected test/reg041/run.sh → test/reg041/run test/reg042/expected.out → test/reg042/expected test/reg042/run.sh → test/reg042/run test/reg045/expected.out → test/reg045/expected test/reg045/run.sh → test/reg045/run test/reg048/expected.out → test/reg048/expected test/reg048/run.sh → test/reg048/run test/reg051-disabled/expected.out → test/reg051-disabled/expected test/reg051-disabled/run.sh → test/reg051-disabled/run test/reg052/expected.out → test/reg052/expected test/reg052/run.sh → test/reg052/run test/reg067/expected.out → test/reg067/expected test/reg067/run.sh → test/reg067/run test/reg075/expected.out → test/reg075/expected test/reg075/input.in → test/reg075/input test/reg075/run+3 test/reg075/run.sh−3 test/reg076/expected.out → test/reg076/expected test/reg076/input.in → test/reg076/input test/reg076/run.sh → test/reg076/run test/reg077/expected.out → test/reg077/expected test/reg077/run.sh → test/reg077/run test/regression001/expected.out → test/regression001/expected test/regression001/run.sh → test/regression001/run test/regression002/expected.out → test/regression002/expected test/regression002/run.sh → test/regression002/run test/regression003/expected.out → test/regression003/expected test/regression003/run.sh → test/regression003/run test/sourceLocation001/expected.out → test/sourceLocation001/expected test/sourceLocation001/run.sh → test/sourceLocation001/run test/st001/expected.out → test/st001/expected test/st001/run.sh → test/st001/run test/st001/test001.idr+1−1 test/st001/testFile.in → test/st001/testFile test/st002/expected.out → test/st002/expected test/st002/run.sh → test/st002/run test/st002/test002.idr+1−1 test/st002/testFile.in → test/st002/testFile test/st003/expected.out → test/st003/expected test/st003/run.sh → test/st003/run test/st003/test003.idr+1−1 test/st003/testFile.in → test/st003/testFile test/st004/expected.out → test/st004/expected test/st004/run.sh → test/st004/run test/st005/expected.out → test/st005/expected test/st005/run.sh → test/st005/run test/st006/expected.out → test/st006/expected test/st006/run.sh → test/st006/run test/st007/expected.out → test/st007/expected test/st007/run.sh → test/st007/run test/sugar001/expected.out → test/sugar001/expected test/sugar001/run.sh → test/sugar001/run test/sugar002/expected.out → test/sugar002/expected test/sugar002/run.sh → test/sugar002/run test/sugar003/expected.out → test/sugar003/expected test/sugar003/run.sh → test/sugar003/run test/sugar004/expected.out → test/sugar004/expected test/sugar004/run.sh → test/sugar004/run test/sugar005/expected.out → test/sugar005/expected test/sugar005/run.sh → test/sugar005/run test/syntax001/expected.out → test/syntax001/expected test/syntax001/run.sh → test/syntax001/run test/syntax002/expected.out → test/syntax002/expected test/syntax002/run.sh → test/syntax002/run test/tactics001/expected.out → test/tactics001/expected test/tactics001/run.sh → test/tactics001/run test/totality001/expected.out → test/totality001/expected test/totality001/run.sh → test/totality001/run test/totality002/expected.out → test/totality002/expected test/totality002/run.sh → test/totality002/run test/totality003/expected.out → test/totality003/expected test/totality003/run.sh → test/totality003/run test/totality004/expected.out → test/totality004/expected test/totality004/run.sh → test/totality004/run test/totality005/expected.out → test/totality005/expected test/totality005/run.sh → test/totality005/run test/totality006/expected.out → test/totality006/expected test/totality006/run.sh → test/totality006/run test/totality007/expected.out → test/totality007/expected test/totality007/run.sh → test/totality007/run test/totality008/expected.out → test/totality008/expected test/totality008/run.sh → test/totality008/run test/totality009/expected.out → test/totality009/expected test/totality009/run.sh → test/totality009/run test/totality010/expected.out → test/totality010/expected test/totality010/run.sh → test/totality010/run test/totality011/expected.out → test/totality011/expected test/totality011/run.sh → test/totality011/run test/totality012/expected.out → test/totality012/expected test/totality012/run.sh → test/totality012/run test/totality013/expected.out → test/totality013/expected test/totality013/run.sh → test/totality013/run test/totality014/expected.out → test/totality014/expected test/totality014/run.sh → test/totality014/run test/totality015/expected.out → test/totality015/expected test/totality015/run.sh → test/totality015/run test/totality016/expected.out → test/totality016/expected test/totality016/run.sh → test/totality016/run test/totality017/expected.out → test/totality017/expected test/totality017/run.sh → test/totality017/run test/totality018/expected.out → test/totality018/expected test/totality018/run.sh → test/totality018/run test/totality019/expected.out → test/totality019/expected test/totality019/run.sh → test/totality019/run test/totality020/expected.out → test/totality020/expected test/totality020/run.sh → test/totality020/run test/totality021/expected.out → test/totality021/expected test/totality021/run.sh → test/totality021/run test/totality022/expected.out → test/totality022/expected test/totality022/run.sh → test/totality022/run test/totality023/expected.out → test/totality023/expected test/totality023/run.sh → test/totality023/run test/totality024/expected.out → test/totality024/expected test/totality024/run.sh → test/totality024/run test/totality025/expected.out → test/totality025/expected test/totality025/run.sh → test/totality025/run test/totality026/expected.out → test/totality026/expected test/totality026/run.sh → test/totality026/run test/tutorial001/expected.out → test/tutorial001/expected test/tutorial001/run.sh → test/tutorial001/run test/tutorial002/expected.out → test/tutorial002/expected test/tutorial002/run.sh → test/tutorial002/run test/tutorial003/expected.out → test/tutorial003/expected test/tutorial003/run.sh → test/tutorial003/run test/tutorial004/expected.out → test/tutorial004/expected test/tutorial004/run.sh → test/tutorial004/run test/tutorial005/expected.out → test/tutorial005/expected test/tutorial005/run.sh → test/tutorial005/run test/tutorial006/expected.out → test/tutorial006/expected test/tutorial006/run.sh → test/tutorial006/run test/tutorial007/expected.out → test/tutorial007/expected test/tutorial007/run.sh → test/tutorial007/run test/unique001/expected.out → test/unique001/expected test/unique001/run.sh → test/unique001/run test/unique004/expected.out → test/unique004/expected test/unique004/run.sh → test/unique004/run test/universes001/expected.out → test/universes001/expected test/universes001/run.sh → test/universes001/run test/universes002/expected.out → test/universes002/expected test/universes002/run.sh → test/universes002/run test/views001/expected.out → test/views001/expected test/views001/run.sh → test/views001/run test/views002/expected.out → test/views002/expected test/views002/run.sh → test/views002/run test/views003/expected.out → test/views003/expected test/views003/run.sh → test/views003/run
.travis.yml+35−53
@@ -1,4 +1,5 @@
1−dist: xenial
1+dist: trusty
2+sudo: false
23
34language: c
45
@@ -8,37 +9,35 @@ env:
89
910matrix:
1011 include:
11− - env: CABALVER="2.4" GHCVER="8.6.5" STACKVER="15.4" STYLISH=YES
12+ - env: CABALVER="2.4" GHCVER="8.6.5" STACKVER="14.15" STYLISH=YES
1213 addons: {apt: {packages: [cabal-install-2.4,ghc-8.6.5,hscolour], sources: [hvr-ghc]}}
13− - env: CABALVER="2.4" GHCVER="8.2.2" TESTS="lib_doc doc"
14+ - 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"
1422 compiler: ": #GHC 8.2.2"
15− addons: {apt: {packages: [cabal-install-2.4,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
16− - env: CABALVER="2.4" GHCVER="8.2.2" TESTS="test_js"
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"
1725 compiler: ": #GHC 8.2.2"
18− addons: {apt: {packages: [cabal-install-2.4,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
19− - env: CABALVER="2.4" GHCVER="8.2.2" TESTS="test_c"
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"
2028 compiler: ": #GHC 8.2.2"
21− addons: {apt: {packages: [cabal-install-2.4,ghc-8.2.2,cppcheck,hscolour], sources: [hvr-ghc]}}
22− - env: CABALVER="2.4" GHCVER="8.4.4" TESTS="lib_doc doc"
23− compiler: ": #GHC 8.4.4"
24− addons: {apt: {packages: [cabal-install-2.4,ghc-8.4.4,cppcheck,hscolour], sources: [hvr-ghc]}}
25− - env: CABALVER="2.4" GHCVER="8.4.4" TESTS="test_js"
26− compiler: ": #GHC 8.4.4"
27− addons: {apt: {packages: [cabal-install-2.4,ghc-8.4.4,cppcheck,hscolour], sources: [hvr-ghc]}}
28− - env: CABALVER="2.4" GHCVER="8.4.4" TESTS="test_c"
29− compiler: ": #GHC 8.4.4"
30− addons: {apt: {packages: [cabal-install-2.4,ghc-8.4.4,cppcheck,hscolour], sources: [hvr-ghc]}}
31− - env: CABALVER="3.0" GHCVER="8.8.3" TESTS="lib_doc doc"
32− compiler: ": #GHC 8.8.3"
33− addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3,cppcheck,hscolour], sources: [hvr-ghc]}}
34− - env: CABALVER="3.0" GHCVER="8.8.3" TESTS="test_js"
35− compiler: ": #GHC 8.8.3"
36− addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3,cppcheck,hscolour], sources: [hvr-ghc]}}
37− - env: CABALVER="3.0" GHCVER="8.8.3" TESTS="test_c"
38− compiler: ": #GHC 8.8.3"
39− addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3,cppcheck,hscolour], sources: [hvr-ghc]}}
40− - env: CABALVER="3.0" GHCVER="8.8.3" IDRIS2=YES
41− addons: {apt: {packages: [cabal-install-3.0,ghc-8.8.3], sources: [hvr-ghc]}}
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]}}
4241 fast-finish: true
4342
4443cache:
@@ -57,7 +56,7 @@ before_install:
5756 - unset CC
5857 - if [[ $TRAVIS_OS_NAME == 'linux' ]];
5958 then
60− export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.cabal/bin:$HOME/opt/scheme/bin/:$PATH;
59+ export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.cabal/bin:$PATH;
6160 export SED=sed;
6261 export ZCAT=zcat;
6362 fi
@@ -72,21 +71,6 @@ before_install:
7271 export PKG_CONFIG_PATH=/usr/local/opt/libffi/lib/pkgconfig:$PKG_CONFIG_PATH;
7372 fi
7473 - 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
9074
9175install:
9276 - which cabal
@@ -104,7 +88,7 @@ install:
10488 # causing cabal's default configuration (jobs: $ncpus)
10589 # to run into the GHC #9221 bug which can result in longer build-times.
10690 - $SED -i -r 's/(^jobs:).*/\1 2/' $HOME/.cabal/config
107− - cabal v1-install -f FFI --only-dependencies --enable-tests --dry -v > installplan.txt
91+ - cabal install -f FFI --only-dependencies --enable-tests --dry -v > installplan.txt
10892 - $SED -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
10993 # check whether current requested install-plan matches cached package-db snapshot
11094 - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
@@ -117,7 +101,7 @@ install:
117101 echo "cabal build-cache MISS";
118102 rm -rf $HOME/.cabsnap;
119103 mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
120− cabal v1-install -f FFI --only-dependencies --enable-tests;
104+ cabal install -f FFI --only-dependencies --enable-tests;
121105 fi
122106 # snapshot package-db on cache miss
123107 - if [ ! -d $HOME/.cabsnap ];
@@ -128,30 +112,28 @@ install:
128112 cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
129113 fi
130114
131−
132115before_script:
133116 - ORIGINAL_DIR=$(pwd)
134− - cabal v1-sdist
117+ - cabal sdist
135118 - cd ..
136119 - tar -xf ${ORIGINAL_DIR}/dist/${PKGNAME}*.tar.gz
137120 - cd ${PKGNAME}*
138121script:
139− - export LD_PRELOAD=/opt/ghc/${GHCVER}/lib/ghc-${GHCVER}/rts/libffi.so.7
140122###
141123 - echo 'Configure...' && echo -en 'travis_fold:start:script.configure\\r'
142− - cabal v1-configure -f FFI -f CI --enable-tests
124+ - cabal configure -f FFI -f CI --enable-tests
143125 - echo -en 'travis_fold:end:script.configure\\r'
144126###
145127 - echo 'Build...' && echo -en 'travis_fold:start:script.build\\r'
146− - cabal v1-build
128+ - cabal build
147129 - echo -en 'travis_fold:end:script.build\\r'
148130###
149131 - echo 'Copy...' && echo -en 'travis_fold:start:script.copy\\r'
150− - cabal v1-copy
132+ - cabal copy
151133 - echo -en 'travis_fold:end:script.copy\\r'
152134###
153135 - echo 'Register...' && echo -en 'travis_fold:start:script.register\\r'
154− - cabal v1-register
136+ - cabal register
155137 - echo -en 'travis_fold:end:script.register\\r'
156138###
157139 - echo 'Cppcheck...' && echo -en 'travis_fold:start:script.cppcheck\\r'
CHANGELOG.md−3
@@ -1,6 +1,3 @@
1−# New since last release
2−+ Updated to work with GHC 8.8 and cabal 3.0
3−
41# New in 1.3.2
52+ Documentation added to proof section
63
INSTALL.md+2−11
@@ -130,8 +130,7 @@ 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 uses the version of libFFI shipped with GHC, instead of the system version.
134−
133+The issue is that for GHC versions greater than 8.4.X linking to libFFI is broken.
135134See the following GHC issue page for more information:
136135
137136 <https://gitlab.haskell.org/ghc/ghc/issues/15397>
@@ -142,12 +141,4 @@ Specifically, one will see an error message along the lines of:
142141
143142> error while loading shared libraries: libffi.so.7: cannot open shared object file: No such file or directory
144143
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.
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.
Makefile+4−4
@@ -30,15 +30,15 @@ stylize:
3030 ./stylize.sh
3131
3232test_c:
33− $(CABAL) v1-test $(ARGS) --test-options \
33+ $(CABAL) test $(ARGS) --test-options \
3434 "$(TEST-ARGS) --rerun-update +RTS -N$(TEST-JOBS) -RTS"
3535
3636test_js:
37− $(CABAL) v1-test $(ARGS) --test-options \
37+ $(CABAL) test $(ARGS) --test-options \
3838 "$(TEST-ARGS) --node --rerun-update +RTS -N$(TEST-JOBS) -RTS"
3939
4040test_update:
41− $(CABAL) v1-test $(ARGS) --test-options \
41+ $(CABAL) 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) v1-haddock --hyperlink-source --html --hoogle --html-location="https://hackage.haskell.org/packages/archive/\$$pkg/latest/doc/html" --haddock-options="--title Idris"
59+ $(CABAL) 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−3
@@ -44,6 +44,3 @@ 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,6 +215,36 @@ 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+
218248#if !(MIN_VERSION_Cabal(2,0,0))
219249rewriteFileEx :: Verbosity -> FilePath -> String -> IO ()
220250rewriteFileEx _ = rewriteFile
@@ -323,5 +353,8 @@ main = defaultMainWithHooks $ simpleUserHooks
323353 , postInst = \_ flags pkg local ->
324354 idrisInstall (S.fromFlag $ S.installVerbosity flags)
325355 NoCopyDest pkg local
356+ , preSDist = idrisPreSDist
357+ , sDistHook = idrisSDist (sDistHook simpleUserHooks)
358+ , postSDist = idrisPostSDist
326359 , testHook = idrisTestHook
327360 }
appveyor.yml+3−3
@@ -1,17 +1,17 @@
11version: 1.0.{build}
22init:
33- ps: >-
4− choco install cabal --no-progress
4+ choco install cabal --version=2.4.1.0 --no-progress
55
66 mkdir C:\ghc
77
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"
8+ 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"
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.8.2\bin;$HOME\AppData\Roaming\cabal\bin"
14+ $env:PATH="$env:PATH;c:\ghc\ghc-8.4.3\bin;$HOME\AppData\Roaming\cabal\bin"
1515
1616 cabal v1-update
1717
docs/conf.py+2−3
@@ -51,7 +51,7 @@ master_doc = 'index'
5151
5252# General information about the project.
5353project = u'Idris'
54−copyright = u'2017-2020, The Idris Community'
54+copyright = u'2017-2019, The Idris Community'
5555author = u'The Idris Community'
5656
5757# The version info for the project you're documenting, acts as replacement for
@@ -251,7 +251,6 @@ latex_elements = {
251251# Additional stuff for the LaTeX preamble.
252252'preamble': r'''
253253\usepackage{lmodern}
254−\usepackage{textalpha}
255254\usepackage[T1]{fontenc}
256255\usepackage[utf8x]{inputenc}
257256\usepackage{titlesec}
@@ -301,7 +300,7 @@ latex_elements = {
301300# (source start file, target name, title,
302301# author, documentclass [howto, manual, or own class]).
303302latex_documents = [
304− # (master_doc, 'idris.tex', u'Documentation for the Idris Language', u'The Idris Community', 'report')
303+ ('index', 'idris-documentation-complete.tex', u'Documentation for the Idris Language', u'The Idris Community', 'report'),
305304 ('tutorial/index', 'idris-tutorial.tex', u'The Idris Tutorial', u'The Idris Community', 'howto'),
306305]
307306
docs/effects/introduction.rst+1−2
@@ -17,8 +17,7 @@ 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. The ``-p effects`` flag
21−is needed when starting Idris.
20+examples directory of the Idris repository.
2221
2322Consider, for example, the following introductory function which
2423illustrates the kind of properties which can be expressed in the type
docs/image/parserModules.pngdeleted

Binary file not shown.

docs/image/parserModules.svgdeleted−1251
@@ -1,1251 +0,0 @@
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.pngdeleted

Binary file not shown.

docs/image/parserTopLevel.svgdeleted−294
@@ -1,294 +0,0 @@
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.pngdeleted

Binary file not shown.

docs/image/recogniser.svgdeleted−477
@@ -1,477 +0,0 @@
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/tokenise.pngdeleted

Binary file not shown.

docs/image/tokenise.svgdeleted−740
@@ -1,740 +0,0 @@
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/index.rst−1
@@ -25,6 +25,5 @@ Documentation for the Idris Language
2525 effects/index
2626 proofs/index
2727 elaboratorReflection/index
28− parserLibrary/index
2928 reference/index
3029 guides/index
docs/parserLibrary/index.rstdeleted−24
@@ -1,24 +0,0 @@
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.rstdeleted−76
@@ -1,76 +0,0 @@
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.rstdeleted−288
@@ -1,288 +0,0 @@
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.rstdeleted−700
@@ -1,700 +0,0 @@
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.rstdeleted−250
@@ -1,250 +0,0 @@
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/propositional.rst+1−1
@@ -34,7 +34,7 @@ Replace
3434
3535This 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:
3636
37−.. code-block:: idris
37+.. code-block::
3838
3939 if x=y
4040 then P x = P y
docs/reference/codegen.rst+4−4
@@ -36,10 +36,10 @@ issue the following command:
3636 $ idris --codegen javascript hello.idr -o hello.js
3737
3838
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.
39+Idris can produce very big chunks of JavaScript code (hello world
40+weighs in at 1500 lines). However, the generated code can be minified
41+using the `closure-compiler
42+<https://developers.google.com/closure/compiler/>`__ from Google.
4343
4444::
4545
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
idris-tutorial.pdf

Binary file not shown.

idris.cabal+47−101
@@ -1,7 +1,6 @@
1−Cabal-Version: 2.4
21Name: idris
32Version: 1.3.2
4−License: BSD-3-Clause
3+License: BSD3
54License-file: LICENSE
65Author: Edwin Brady
76Maintainer: Edwin Brady <eb@cs.st-andrews.ac.uk>
@@ -42,25 +41,42 @@ Description: Idris is a general purpose language with full dependent types.
4241 .
4342 * Hugs style interactive environment
4443
44+Cabal-Version: >= 1.22
45+
4546Build-type: Custom
4647
4748Tested-With: GHC == 7.10.3, GHC == 8.0.1
4849
49−-- NOTE: due to https://github.com/haskell/cabal/issues/6125 the use of ** is
50−-- heavily discouraged.
5150Data-files: idrisdoc/styles.css
52− jsrts/jsbn/*.js
53− jsrts/*.js
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
5456 jsrts/jsbn/LICENSE
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
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
6480
6581Extra-doc-files:
6682 CHANGELOG.md
@@ -70,75 +86,13 @@ Extra-doc-files:
7086 README.md
7187 RELEASE-CHECKS.md
7288 idris-tutorial.pdf
73− man/idris.1
7489 samples/effects/*.idr
7590 samples/misc/*.idr
76− samples/tutorial/*.idr
77− samples/ST/*.idr
78− samples/ST/Graphics/*.idr
79− samples/ST/Net/*.idr
8091 samples/misc/*.lidr
92+ samples/tutorial/*.idr
8193
8294-- extra-source-files is generated by Setup.hs using `git --ls-files`.
8395Extra-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
14296
14397source-repository head
14498 type: git
@@ -146,7 +100,7 @@ source-repository head
146100
147101custom-setup
148102 setup-depends:
149− Cabal >= 2.4 && < 3.1,
103+ Cabal >= 1.10 && <2.5,
150104 base >= 4 && <5,
151105 directory,
152106 filepath,
@@ -307,29 +261,26 @@ Library
307261 Util.Pretty
308262 , Util.Net
309263
264+
265+
266+ -- Auto Generated
310267 , Paths_idris
311268 , Version_idris
312269 , Tools_idris
313270 , BuildFlags_idris
314271
315− -- Auto Generated
316− Autogen-modules: Paths_idris
317− , Version_idris
318− , Tools_idris
319− , BuildFlags_idris
320−
321272 Build-depends: base >=4 && <5
322273 , aeson >= 0.6 && < 1.5
323274 , annotated-wl-pprint >= 0.7 && < 0.8
324− , ansi-terminal < 0.11
275+ , ansi-terminal < 0.10
325276 , ansi-wl-pprint < 0.7
326277 , array >= 0.4.0.1 && < 0.6
327278 , base64-bytestring < 1.1
328279 , binary >= 0.8.4.1 && < 0.9
329280 , blaze-html >= 0.6.1.3 && < 0.10
330− , blaze-markup >= 0.5.2.1 && < 0.10
281+ , blaze-markup >= 0.5.2.1 && < 0.9
331282 , bytestring < 0.11
332− , cheapskate >= 0.1.1.2 && < 0.2
283+ , cheapskate >= 0.1.1 && < 0.2
333284 , code-page >= 0.1 && < 0.3
334285 , containers >= 0.5 && < 0.7
335286 , deepseq < 1.5
@@ -338,10 +289,10 @@ Library
338289 , fingertree >= 0.1.4.1 && < 0.2
339290 , haskeline >= 0.7 && < 0.8
340291 , ieee754 >= 0.7 && < 0.9
341− , megaparsec >= 7.0.4 && < 9
292+ , megaparsec >= 7.0.4 && < 8
342293 , mtl >= 2.1 && < 2.3
343− , network >= 2.7 && < 3.1.2
344− , optparse-applicative >= 0.13 && < 0.16
294+ , network >= 2.7 && < 2.9
295+ , optparse-applicative >= 0.13 && < 0.15
345296 , parser-combinators >= 1.0.0
346297 , pretty < 1.2
347298 , process < 1.7
@@ -349,8 +300,8 @@ Library
349300 , safe >= 0.3.9
350301 , split < 0.3
351302 , terminal-size < 0.4
352− , text >=1.2.1.0 && < 1.4
353− , time >= 1.4 && < 2.0
303+ , text >=1.2.1.0 && < 1.3
304+ , time >= 1.4 && < 1.9
354305 , transformers >= 0.5 && < 0.6
355306 , uniplate >=1.6 && < 1.7
356307 , unordered-containers < 0.3
@@ -358,12 +309,11 @@ Library
358309 , vector < 0.13
359310 , vector-binary-instances < 0.3
360311 , zip-archive > 0.2.3.5 && < 0.5
361− , fsnotify >= 0.2 && < 0.4
312+ , fsnotify >= 0.2 && < 2.2
362313 , async < 2.3
363314
364315 if !impl(ghc >= 8.0)
365− Build-Depends: semigroups == 0.18.*
366− , fail == 4.9.0.*
316+ Build-Depends: semigroups == 0.18.*
367317
368318 Default-Language: Haskell2010
369319 ghc-prof-options: -auto-all -caf-all
@@ -382,7 +332,6 @@ Library
382332 cpp-options: -DIDRIS_GMP
383333 if flag(freestanding)
384334 other-modules: Target_idris
385− autogen-modules: Target_idris
386335 cpp-options: -DFREESTANDING
387336 if flag(CI)
388337 ghc-options: -Werror
@@ -416,7 +365,7 @@ Test-suite regression-and-feature-tests
416365 , filepath
417366 , directory
418367 , haskeline >= 0.7
419− , optparse-applicative >= 0.13 && < 0.16
368+ , optparse-applicative >= 0.13 && < 0.15
420369 , tagged
421370 , tasty >= 0.8
422371 , tasty-golden >= 2.0
@@ -431,7 +380,6 @@ Test-suite regression-and-feature-tests
431380
432381Executable idris-codegen-c
433382 Main-is: Main.hs
434− autogen-modules: Paths_idris
435383 other-modules: Paths_idris
436384 hs-source-dirs: codegen/idris-codegen-c
437385
@@ -447,7 +395,6 @@ Executable idris-codegen-c
447395
448396Executable idris-codegen-javascript
449397 Main-is: Main.hs
450− autogen-modules: Paths_idris
451398 other-modules: Paths_idris
452399 hs-source-dirs: codegen/idris-codegen-javascript
453400
@@ -463,7 +410,6 @@ Executable idris-codegen-javascript
463410
464411Executable idris-codegen-node
465412 Main-is: Main.hs
466− autogen-modules: Paths_idris
467413 other-modules: Paths_idris
468414 hs-source-dirs: codegen/idris-codegen-node
469415
libs/base/Control/Isomorphism.idr+23−20
@@ -17,22 +17,21 @@ 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 (\_ => Refl) (\_ => Refl)
22+isoRefl = MkIso id id (\x => Refl) (\x => 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 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
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)
3635
3736Category Iso where
3837 id = isoRefl
@@ -100,7 +99,8 @@ eitherBotRight = isoTrans eitherComm eitherBotLeft
10099
101100||| Isomorphism is a congruence with regards to disjunction
102101eitherCong : Iso a a' -> Iso b b' -> Iso (Either a b) (Either a' b')
103−eitherCong (MkIso to from toFrom fromTo)
102+eitherCong {a = a} {a' = a'} {b = b} {b' = b'}
103+ (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,7 +143,9 @@ 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, ())) (\_ => Refl) (\(_, ()) => Refl)
146+pairUnitRight = MkIso fst (\x => (x, ())) (\x => Refl) ok
147+ where ok : (x : (a, ())) -> (fst x, ()) = x
148+ ok (x, ()) = Refl
147149
148150||| Conjunction with truth is a no-op
149151pairUnitLeft : Iso ((), a) a
@@ -159,7 +161,8 @@ pairBotRight = isoTrans pairComm pairBotLeft
159161
160162||| Isomorphism is a congruence with regards to conjunction
161163pairCong : Iso a a' -> Iso b b' -> Iso (a, b) (a', b')
162−pairCong (MkIso to from toFrom fromTo)
164+pairCong {a = a} {a' = a'} {b = b} {b' = b'}
165+ (MkIso to from toFrom fromTo)
163166 (MkIso to' from' toFrom' fromTo') =
164167 MkIso to'' from'' iso1 iso2
165168 where to'' : (a, b) -> (a', b')
@@ -202,7 +205,7 @@ distribLeft = MkIso to from toFrom fromTo
202205
203206||| Products distribute over sums
204207distribRight : Iso (a, Either b c) (Either (a, b) (a, c))
205−distribRight = (pairComm `isoTrans` distribLeft) `isoTrans` eitherCong pairComm pairComm
208+distribRight {a} {b} {c} = (pairComm `isoTrans` distribLeft) `isoTrans` eitherCong pairComm pairComm
206209
207210
208211-- Enable preorder reasoning syntax over isomorphisms
@@ -219,7 +222,7 @@ step a iso1 iso2 = isoTrans iso1 iso2
219222-- Isomorphisms over Maybe
220223||| Isomorphism is a congruence with respect to Maybe
221224maybeCong : Iso a b -> Iso (Maybe a) (Maybe b)
222−maybeCong (MkIso to from toFrom fromTo) = MkIso (map to) (map from) ok1 ok2
225+maybeCong {a} {b} (MkIso to from toFrom fromTo) = MkIso (map to) (map from) ok1 ok2
223226 where ok1 : (y : Maybe b) -> map to (map from y) = y
224227 ok1 Nothing = Refl
225228 ok1 (Just x) = (Just (to (from x))) ={ cong (toFrom x) }= (Just x) QED
@@ -250,7 +253,7 @@ maybeVoidUnit = (Maybe Void) ={ maybeEither }=
250253 () QED
251254
252255eitherMaybeLeftMaybe : Iso (Either (Maybe a) b) (Maybe (Either a b))
253−eitherMaybeLeftMaybe =
256+eitherMaybeLeftMaybe {a} {b} =
254257 (Either (Maybe a) b) ={ eitherCongLeft maybeEither }=
255258 (Either (Either a ()) b) ={ eitherAssoc }=
256259 (Either a (Either () b)) ={ eitherCongRight eitherComm }=
@@ -260,7 +263,7 @@ eitherMaybeLeftMaybe =
260263
261264
262265eitherMaybeRightMaybe : Iso (Either a (Maybe b)) (Maybe (Either a b))
263−eitherMaybeRightMaybe =
266+eitherMaybeRightMaybe {a} {b} =
264267 (Either a (Maybe b)) ={ eitherComm }=
265268 (Either (Maybe b) a) ={ eitherMaybeLeftMaybe }=
266269 (Maybe (Either b a)) ={ maybeCong eitherComm }=
@@ -285,8 +288,8 @@ maybeIsoS = MkIso forth back fb bf
285288 fb (FS x) = Refl
286289
287290finZeroBot : Iso (Fin 0) Void
288−finZeroBot = MkIso (void . uninhabited)
289− void
291+finZeroBot = MkIso (\x => void (uninhabited x))
292+ (\x => void x)
290293 (\x => void x)
291294 (\x => void (uninhabited x))
292295
libs/contrib/Control/Algebra/Laws.idr+80−128
@@ -6,146 +6,98 @@ import Interfaces.Verified
66
77%access export
88
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
9+||| A prof that -0 = 0 in any verified group.
10+inverseNeutralIsNeutral : VerifiedGroup t => inverse (the t A.neutral) = A.neutral
2611inverseNeutralIsNeutral {t} =
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
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
3117
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
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
6228
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
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
6945
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
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
8758
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
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
10571
106−||| Inverse operator can be extracted before multiplication.
72+||| A proof that inverse operator can be extracted before multiplication
10773||| (-x)y = -(xy)
108−multInverseInversesL : VerifiedRing t => (l, r : t) ->
109− inverse l <.> r = inverse (l <.> r)
74+multInverseInversesL : VerifiedRingWithUnity t => (l, r : t) -> inverse l <.> r = inverse (l <.> r)
11075multInverseInversesL l r =
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
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
12484
125−||| Inverse operator can be extracted before multiplication.
85+||| A proof that inverse operator can be extracted before multiplication
12686||| x(-y) = -(xy)
127−multInverseInversesR : VerifiedRing t => (l, r : t) ->
128− l <.> inverse r = inverse (l <.> r)
87+multInverseInversesR : VerifiedRingWithUnity t => (l, r : t) -> l <.> inverse r = inverse (l <.> r)
12988multInverseInversesR l r =
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
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
14397
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
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
149101multNegativeByNegativeIsPositive l r =
150102 rewrite multInverseInversesR (inverse l) r in
151103 rewrite sym $ multInverseInversesL (inverse l) r in
libs/contrib/Data/List/Extra.idrnew file+46
@@ -0,0 +1,46 @@
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.idrdeleted−99
@@ -1,99 +0,0 @@
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.idrdeleted−56
@@ -1,56 +0,0 @@
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+29−155
@@ -2,9 +2,18 @@ module Data.Nat.Parity
22
33%access public export
44
5−----------------------------------------
5+--------------------------------------------------------------------------------
6+-- Parity
7+--------------------------------------------------------------------------------
68
7−-- Type-level, constructive definitions of parity.
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
817
918||| A nat is Even when it is twice some other nat.
1019Even : Nat -> Type
@@ -14,8 +23,6 @@ Even n = (half : Nat ** n = half * 2)
1423Odd : Nat -> Type
1524Odd n = (haf : Nat ** n = S $ haf * 2)
1625
17−----------------------------------------
18−
1926||| Two more than an Even is Even.
2027add2Even : Even n -> Even (2 + n)
2128add2Even (half ** pf) = (S half ** cong {f = (+) 2} pf)
@@ -45,73 +52,20 @@ succDoublePredPred {k = S _} prf = cong {f = Nat.pred} prf
4552predEvenOdd : Even (S n) -> Odd n
4653predEvenOdd (half ** pf) = (pred half ** succDoublePredPred pf)
4754
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−
10155||| Every nat is either Even or Odd.
10256evenOrOdd : (n : Nat) -> Either (Even n) (Odd n)
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
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)
11161
11262||| No nat is both Even and Odd.
11363notEvenAndOdd : Even n -> Odd n -> Void
114−notEvenAndOdd en on = notevenandodd (evenEven en) (oddOdd on)
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)
11569
11670||| Evenness is decidable.
11771evenDec : (n : Nat) -> Dec $ Even n
@@ -125,93 +79,13 @@ oddDec n = case evenOrOdd n of
12579 Left even => No $ notEvenAndOdd even
12680 Right odd => Yes odd
12781
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)
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
16887
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)
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
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.Reverse
46+ , Data.List.Extra
4747
4848 , Data.Matrix
4949 , Data.Matrix.Algebraic
libs/prelude/Prelude/File.idr+2−3
@@ -150,8 +150,7 @@ do_getFileAccessTime h =
150150private
151151do_getFileModifiedTime : Ptr -> IO Integer
152152do_getFileModifiedTime h =
153− do vm <- getMyVM
154− MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> Ptr -> IO (Raw Integer)) vm h
153+ do MkRaw i <- foreign FFI_C "fileModifiedTime" (Ptr -> IO (Raw Integer)) h
155154 pure i
156155
157156private
@@ -176,7 +175,7 @@ export
176175fileModifiedTime : File -> IO (Either FileError Integer)
177176fileModifiedTime (FHandle h)
178177 = do s <- do_getFileModifiedTime h
179− if (s == -1)
178+ if (s < 0)
180179 then Left <$> getFileError
181180 else pure (Right s)
182181
libs/prelude/Prelude/Nat.idr+61−32
@@ -512,18 +512,19 @@ 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' right p =
516− plusLeftCancel right left left' $
517− rewrite plusCommutative right left in
518− rewrite plusCommutative right left' in
519− p
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))
520522
521523total plusLeftLeftRightZero : (left : Nat) -> (right : Nat) ->
522524 (p : left + right = left) -> right = Z
523−plusLeftLeftRightZero left right p =
524− plusLeftCancel left right Z $
525− rewrite plusZeroRightNeutral left in
526− p
525+plusLeftLeftRightZero Z right p = p
526+plusLeftLeftRightZero (S left) right p =
527+ plusLeftLeftRightZero left right (succInjective _ _ p)
527528
528529-- Mult
529530total multZeroLeftZero : (right : Nat) -> Z * right = Z
@@ -557,21 +558,27 @@ multCommutative (S left) right =
557558 rewrite multRightSuccPlus right left in
558559 Refl
559560
560−total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
561− (left + centre) * right = (left * right) + (centre * right)
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−
568561total multDistributesOverPlusRight : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
569562 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
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+
574+total multDistributesOverPlusLeft : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
575+ (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
575582
576583total multAssociative : (left : Nat) -> (centre : Nat) -> (right : Nat) ->
577584 left * (centre * right) = (left * centre) * right
@@ -583,10 +590,18 @@ multAssociative (S left) centre right =
583590 Refl
584591
585592total multOneLeftNeutral : (right : Nat) -> 1 * right = right
586−multOneLeftNeutral right = plusZeroRightNeutral right
593+multOneLeftNeutral Z = Refl
594+multOneLeftNeutral (S right) =
595+ let inductiveHypothesis = multOneLeftNeutral right in
596+ rewrite inductiveHypothesis in
597+ Refl
587598
588599total multOneRightNeutral : (left : Nat) -> left * 1 = left
589−multOneRightNeutral left = rewrite multCommutative left 1 in multOneLeftNeutral left
600+multOneRightNeutral Z = Refl
601+multOneRightNeutral (S left) =
602+ let inductiveHypothesis = multOneRightNeutral left in
603+ rewrite inductiveHypothesis in
604+ Refl
590605
591606-- Minus
592607total minusSuccSucc : (left : Nat) -> (right : Nat) ->
@@ -674,7 +689,10 @@ total powerZeroOne : (base : Nat) -> power base 0 = S Z
674689powerZeroOne base = Refl
675690
676691total powerOneNeutral : (base : Nat) -> power base 1 = base
677−powerOneNeutral base = rewrite multCommutative base 1 in multOneLeftNeutral base
692+powerOneNeutral Z = Refl
693+powerOneNeutral (S base) =
694+ let inductiveHypothesis = powerOneNeutral base in
695+ rewrite inductiveHypothesis in Refl
678696
679697total powerOneSuccOne : (exp : Nat) -> power 1 exp = S Z
680698powerOneSuccOne Z = Refl
@@ -683,7 +701,8 @@ powerOneSuccOne (S exp) =
683701 rewrite inductiveHypothesis in Refl
684702
685703total powerSuccSuccMult : (base : Nat) -> power base 2 = mult base base
686−powerSuccSuccMult base = rewrite multOneRightNeutral base in Refl
704+powerSuccSuccMult Z = Refl
705+powerSuccSuccMult (S base) = rewrite multOneRightNeutral base in Refl
687706
688707total powerPowerMultPower : (base : Nat) -> (exp : Nat) -> (exp' : Nat) ->
689708 power (power base exp) exp' = power base (exp * exp')
@@ -777,24 +796,34 @@ minimumIdempotent Z = Refl
777796minimumIdempotent (S k) = cong (minimumIdempotent k)
778797
779798total minimumZeroZeroRight : (right : Nat) -> minimum 0 right = Z
780−minimumZeroZeroRight right = Refl
799+minimumZeroZeroRight Z = Refl
800+minimumZeroZeroRight (S right) = minimumZeroZeroRight right
781801
782802total minimumZeroZeroLeft : (left : Nat) -> minimum left 0 = Z
783−minimumZeroZeroLeft left = rewrite minimumCommutative left 0 in Refl
803+minimumZeroZeroLeft Z = Refl
804+minimumZeroZeroLeft (S left) = Refl
784805
785806total minimumSuccSucc : (left : Nat) -> (right : Nat) ->
786807 minimum (S left) (S right) = S (minimum left right)
787−minimumSuccSucc left right = Refl
808+minimumSuccSucc Z Z = Refl
809+minimumSuccSucc (S left) Z = Refl
810+minimumSuccSucc Z (S right) = Refl
811+minimumSuccSucc (S left) (S right) = Refl
788812
789813total maximumZeroNRight : (right : Nat) -> maximum Z right = right
790−maximumZeroNRight right = Refl
814+maximumZeroNRight Z = Refl
815+maximumZeroNRight (S right) = Refl
791816
792817total maximumZeroNLeft : (left : Nat) -> maximum left Z = left
793−maximumZeroNLeft left = rewrite maximumCommutative left Z in Refl
818+maximumZeroNLeft Z = Refl
819+maximumZeroNLeft (S left) = Refl
794820
795821total maximumSuccSucc : (left : Nat) -> (right : Nat) ->
796822 S (maximum left right) = maximum (S left) (S right)
797−maximumSuccSucc left right = Refl
823+maximumSuccSucc Z Z = Refl
824+maximumSuccSucc (S left) Z = Refl
825+maximumSuccSucc Z (S right) = Refl
826+maximumSuccSucc (S left) (S right) = Refl
798827
799828total sucMaxL : (l : Nat) -> maximum (S l) l = (S l)
800829sucMaxL Z = Refl
rts/idris_bitstring.c+2
@@ -1,3 +1,5 @@
1+#include <assert.h>
2+
13#include "idris_rts.h"
24
35VAL idris_b8const(VM *vm, uint8_t a) {
rts/idris_rts.c+10
@@ -1158,6 +1158,16 @@ 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+
11611171void stackOverflow(void) {
11621172 fprintf(stderr, "Stack overflow");
11631173 exit(-1);
rts/idris_rts.h+4
@@ -507,6 +507,10 @@ 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+
510514// Handle stack overflow.
511515// Just reports an error and exits.
512516
rts/idris_stdfgn.c+2−12
@@ -74,13 +74,13 @@ VAL fileAccessTime(void* h) {
7474 }
7575}
7676
77−VAL fileModifiedTime(VM* vm, void* h) {
77+VAL fileModifiedTime(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 MKBIGUI(vm, buf.st_mtime);
83+ return MKBIGI(buf.st_mtime);
8484 } else {
8585 return MKBIGI(-1);
8686 }
@@ -228,16 +228,6 @@ 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−
241231VAL idris_mkFileError(VM* vm) {
242232 VAL result;
243233 switch(errno) {
rts/idris_stdfgn.h+1−4
@@ -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(VM* vm, void* h);
21+VAL fileModifiedTime(void* h);
2222VAL fileStatusTime(void* h);
2323
2424void* idris_dirOpen(char* dname);
@@ -54,9 +54,6 @@ 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
6057
6158void idris_forceGC();
6259
rts/idris_utf8.c+1
@@ -1,4 +1,5 @@
11#include "idris_utf8.h"
2+#include <stdio.h>
23#include <string.h>
34#include <stdlib.h>
45
src/Idris/CmdOptions.hs+2−3
@@ -18,7 +18,6 @@ import Idris.Info (getIdrisVersion)
1818import Idris.Options
1919import IRTS.CodegenCommon
2020
21−import qualified Control.Monad.Fail as Fail
2221import Control.Monad.Trans (lift)
2322import Control.Monad.Trans.Except (throwE)
2423import Control.Monad.Trans.Reader (ask)
@@ -265,7 +264,7 @@ parseCodegen :: String -> Codegen
265264parseCodegen "bytecode" = Bytecode
266265parseCodegen cg = Via IBCFormat (map toLower cg)
267266
268−parseLogCats :: Fail.MonadFail m => String -> m [LogCat]
267+parseLogCats :: Monad m => String -> m [LogCat]
269268parseLogCats s =
270269 case lastMay (readP_to_S doParse s) of
271270 Just (xs, _) -> return xs
@@ -291,7 +290,7 @@ parseLogCats s =
291290 s <- look
292291 fail $ "Category: " ++ s ++ " is not recognised."
293292
294−parseConsoleWidth :: Fail.MonadFail m => String -> m ConsoleWidth
293+parseConsoleWidth :: Monad m => String -> m ConsoleWidth
295294parseConsoleWidth "auto" = return AutomaticWidth
296295parseConsoleWidth "infinite" = return InfinitelyWide
297296parseConsoleWidth 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 -> error $ show pat ++ " is not a constructor or constant (can't happen)"
630+ pat -> fail $ 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,7 +70,6 @@ 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
7473import Control.Monad.State.Strict
7574import Data.Binary hiding (get, put)
7675import Data.Char
@@ -325,11 +324,6 @@ bindTC x k = case x of
325324instance Monad TC where
326325 return x = OK x
327326 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
333327 fail e = Error (InternalMsg e)
334328
335329instance MonadPlus TC where
src/Idris/Parser/Stack.hs+2−16
@@ -5,7 +5,7 @@ Description : Idris parser stack and its primitives.
55License : BSD3
66Maintainer : The Idris Community.
77-}
8−{-# LANGUAGE CPP, ConstraintKinds, FlexibleContexts, MultiParamTypeClasses #-}
8+{-# LANGUAGE ConstraintKinds, FlexibleContexts, MultiParamTypeClasses #-}
99module Idris.Parser.Stack
1010 ( -- * Parsing
1111 Parser(..)
@@ -36,7 +36,6 @@ import Idris.Core.TT (FC(..))
3636import Idris.Output (Message(..))
3737
3838import Control.Arrow (app)
39−import qualified Control.Monad.Fail as Fail
4039import Control.Monad.State.Strict (StateT(..), evalStateT)
4140import Control.Monad.Writer.Strict (MonadWriter(..), WriterT(..), listen,
4241 runWriterT, tell)
@@ -52,7 +51,7 @@ import qualified Util.Pretty as PP
5251type Parser s = StateT s (WriterT FC (P.Parsec Void String))
5352
5453-- | A constraint for parsing without state
55−type Parsing m = (Fail.MonadFail m, P.MonadParsec Void String m, MonadWriter FC m)
54+type Parsing m = (P.MonadParsec Void String m, MonadWriter FC m)
5655
5756-- | Run the Idris parser stack
5857runparser :: Parser st res -> st -> String -> String -> Either ParseError res
@@ -77,20 +76,11 @@ parseErrorOffset = P.errorOffset . parseError
7776instance Message ParseError where
7877 messageExtent err = sourcePositionFC pos
7978 where
80−#if MIN_VERSION_megaparsec(8,0,0)
81− P.PosState {P.pstateSourcePos = pos} =
82− P.reachOffsetNoLine (parseErrorOffset err) (parseErrorPosState err)
83−#else
8479 (pos, _) = P.reachOffsetNoLine (parseErrorOffset err) (parseErrorPosState err)
85−#endif
8680 messageText = PP.text . init . P.parseErrorTextPretty . parseError
8781 messageSource err = Just sline
8882 where
89−#if MIN_VERSION_megaparsec(8,0,0)
90− (sline, _) = P.reachOffset (parseErrorOffset err) (parseErrorPosState err)
91−#else
9283 (_, sline, _) = P.reachOffset (parseErrorOffset err) (parseErrorPosState err)
93−#endif
9484
9585-- | A fully formatted parse error, with caret and bar, etc.
9686prettyError :: ParseError -> String
@@ -98,11 +88,7 @@ prettyError = P.errorBundlePretty . unParseError
9888
9989{- * Mark and restore -}
10090
101−#if MIN_VERSION_megaparsec(8,0,0)
102−type Mark = P.State String Void
103−#else
10491type Mark = P.State String
105−#endif
10692
10793-- | Retrieve the parser state so we can restart from this point later.
10894mark :: Parsing m => m Mark
stack-11.22.yamldeleted−21
@@ -1,21 +0,0 @@
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.yamldeleted−20
@@ -1,20 +0,0 @@
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.yamldeleted−17
@@ -1,17 +0,0 @@
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.yamldeleted−17
@@ -1,17 +0,0 @@
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.yamlnew file+25
@@ -0,0 +1,25 @@
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 120000 → 100644+24−1
@@ -1 +0,0 @@
1−stack-15.4.yaml
@@ -0,0 +1,24 @@
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+ - megaparsec-7.0.4
7+ - parser-combinators-1.0.0
8+ - zip-archive-0.3.3@sha256:47cf2d66cc8e237f7226837758e1b041e24048ef3820d3d10276c500edb921bf
9+ - containers-0.5.11.0@sha256:28ad7337057442f75bc689315ab4ec7bdf5e6b2c39668f306672cecd82c02798
10+ - tasty-rerun-1.1.14@sha256:ba9c19a281535bea566e1044bc02c36ef17abcb310af4b6a149ec11780c7ce35
11+ - binary-0.8.7.0@sha256:ae3e6cca723ac55c54bbb3fa771bcf18142bc727afd57818e66d6ee6c8044f12
12+ - text-1.2.4.0@sha256:8c24450feb8e3bbb7ea3e17af24ef57e85db077c4bf53e5bcc345b283d1b1d5b
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
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.sh` 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` 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.out` file by doing:
120+7. Generate the `expected` 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.out`. 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`. 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.out` file for every test, do one of the following:
149+To update the `expected` 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.sh` script itself crashes.
160+"Accepted" tests are the ones that update the golden file. A test can still fail if the `run` 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.out"
65+ ref = path </> "expected"
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.sh" : flags)) {cwd = Just path}
95+ let run = (proc "bash" ("run" : 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.out → test/base001/expectedrenamed

The content is the same.

test/base001/run.sh → test/base001/runrenamed+1−1
@@ -3,7 +3,7 @@
33set -u
44
55if [[ ${OSTYPE} = 'msys' ]]; then
6− cat expected.out # skip this test on Windows
6+ cat expected # 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.out → test/basic001/expectedrenamed

The content is the same.

test/basic001/run.sh → test/basic001/runrenamed

Only the mode changed.

test/basic002/expected.out → test/basic002/expectedrenamed

The content is the same.

test/basic002/run.sh → test/basic002/runrenamed

Only the mode changed.

test/basic003/expected.out → test/basic003/expectedrenamed

The content is the same.

test/basic003/run.sh → test/basic003/runrenamed

Only the mode changed.

test/basic004/expected.out → test/basic004/expectedrenamed

The content is the same.

test/basic004/run.sh → test/basic004/runrenamed

Only the mode changed.

test/basic005/expected.out → test/basic005/expectedrenamed

The content is the same.

test/basic005/run.sh → test/basic005/runrenamed

Only the mode changed.

test/basic006/expected.out → test/basic006/expectedrenamed

The content is the same.

test/basic006/run.sh → test/basic006/runrenamed

Only the mode changed.

test/basic007/expected.out → test/basic007/expectedrenamed

The content is the same.

test/basic007/run.sh → test/basic007/runrenamed

Only the mode changed.

test/basic008/expected.out → test/basic008/expectedrenamed

The content is the same.

test/basic008/run.sh → test/basic008/runrenamed

Only the mode changed.

test/basic009/expected.out → test/basic009/expectedrenamed

The content is the same.

test/basic009/run.sh → test/basic009/runrenamed

Only the mode changed.

test/basic010/expected.out → test/basic010/expectedrenamed

The content is the same.

test/basic010/run.sh → test/basic010/runrenamed

Only the mode changed.

test/basic011/expected.out → test/basic011/expectedrenamed

The content is the same.

test/basic011/run.sh → test/basic011/runrenamed

Only the mode changed.

test/basic012/expected.out → test/basic012/expectedrenamed

The content is the same.

test/basic012/run.sh → test/basic012/runrenamed

Only the mode changed.

test/basic013/expected.out → test/basic013/expectedrenamed

The content is the same.

test/basic013/run.sh → test/basic013/runrenamed

Only the mode changed.

test/basic014/expected.out → test/basic014/expectedrenamed

The content is the same.

test/basic014/run.sh → test/basic014/runrenamed

Only the mode changed.

test/basic015/expected.out → test/basic015/expectedrenamed

The content is the same.

test/basic015/run.sh → test/basic015/runrenamed

Only the mode changed.

test/basic016/expected.out → test/basic016/expectedrenamed

The content is the same.

test/basic016/run.sh → test/basic016/runrenamed

Only the mode changed.

test/basic017/expected.out → test/basic017/expectedrenamed

The content is the same.

test/basic017/run.sh → test/basic017/runrenamed

Only the mode changed.

test/basic018/expected.out → test/basic018/expectedrenamed

The content is the same.

test/basic018/run.sh → test/basic018/runrenamed

Only the mode changed.

test/basic019/expected.out → test/basic019/expectedrenamed

The content is the same.

test/basic019/run.sh → test/basic019/runrenamed

Only the mode changed.

test/basic020/expected.out → test/basic020/expectedrenamed

The content is the same.

test/basic020/run.sh → test/basic020/runrenamed

Only the mode changed.

test/basic021/expected.out → test/basic021/expectedrenamed

The content is the same.

test/basic021/run.sh → test/basic021/runrenamed

Only the mode changed.

test/basic022/expected.out → test/basic022/expectedrenamed

The content is the same.

test/basic022/run.sh → test/basic022/runrenamed

Only the mode changed.

test/basic023/expected.out → test/basic023/expectedrenamed

The content is the same.

test/basic023/run.sh → test/basic023/runrenamed

Only the mode changed.

test/basic024/expected.out → test/basic024/expectedrenamed

The content is the same.

test/basic024/input.in → test/basic024/inputrenamed

The content is the same.

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

The content is the same.

test/basic025/input.in → test/basic025/inputrenamed

The content is the same.

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

The content is the same.

test/basic026/run.sh → test/basic026/runrenamed

The content is the same.

test/bignum001/expected.out → test/bignum001/expectedrenamed

The content is the same.

test/bignum001/run.sh → test/bignum001/runrenamed

Only the mode changed.

test/bignum002/expected.out → test/bignum002/expectedrenamed

The content is the same.

test/bignum002/run.sh → test/bignum002/runrenamed

Only the mode changed.

test/bignum003/expected.out → test/bignum003/expectedrenamed

The content is the same.

test/bignum003/run.sh → test/bignum003/runrenamed

Only the mode changed.

test/bounded001/expected.out → test/bounded001/expectedrenamed

The content is the same.

test/bounded001/run.sh → test/bounded001/runrenamed

Only the mode changed.

test/buffer001/expected.out → test/buffer001/expectedrenamed

The content is the same.

test/buffer001/run.sh → test/buffer001/runrenamed

Only the mode changed.

test/buffer002/expected.out → test/buffer002/expectedrenamed

The content is the same.

test/buffer002/run.sh → test/buffer002/runrenamed

Only the mode changed.

test/contrib001/expected.out → test/contrib001/expectedrenamed

The content is the same.

test/contrib001/run.sh → test/contrib001/runrenamed

Only the mode changed.

test/corecords001/expected.out → test/corecords001/expectedrenamed

The content is the same.

test/corecords001/run.sh → test/corecords001/runrenamed

Only the mode changed.

test/corecords002/expected.out → test/corecords002/expectedrenamed

The content is the same.

test/corecords002/run.sh → test/corecords002/runrenamed

Only the mode changed.

test/delab001/expected.out → test/delab001/expectedrenamed

The content is the same.

test/delab001/input.in → test/delab001/inputrenamed

The content is the same.

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

The content is the same.

test/directives001/run.sh → test/directives001/runrenamed

Only the mode changed.

test/directives002/expected.out → test/directives002/expectedrenamed

The content is the same.

test/directives002/run.sh → test/directives002/runrenamed

The content is the same.

test/directives003/expected.out → test/directives003/expectedrenamed

The content is the same.

test/directives003/run.sh → test/directives003/runrenamed

Only the mode changed.

test/disambig002/expected.out → test/disambig002/expectedrenamed

The content is the same.

test/disambig002/run.sh → test/disambig002/runrenamed

Only the mode changed.

test/docs001/expected.out → test/docs001/expectedrenamed

The content is the same.

test/docs001/input.in → test/docs001/inputrenamed

The content is the same.

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

The content is the same.

test/docs002/input.in → test/docs002/inputrenamed

The content is the same.

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

The content is the same.

test/docs003/input.in → test/docs003/inputrenamed

The content is the same.

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

The content is the same.

test/docs004/input.in → test/docs004/inputrenamed

The content is the same.

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

The content is the same.

test/docs005/input.in → test/docs005/inputrenamed

The content is the same.

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

The content is the same.

test/docs006/input.in → test/docs006/inputrenamed

The content is the same.

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

The content is the same.

test/dsl001/input.in → test/dsl001/inputrenamed

The content is the same.

test/dsl001/run.sh → test/dsl001/runrenamed+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.in
4+${IDRIS:-idris} $@ test001.idr --partial-eval --quiet --port none < input
55rm -f test001 test001.ibc
test/dsl002/expected.out → test/dsl002/expectedrenamed

The content is the same.

test/dsl002/run.sh → test/dsl002/runrenamed

Only the mode changed.

test/dsl002/test.in → test/dsl002/testrenamed

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.in")
67+main = run (readH "test")
6868
6969
test/dsl003/expected.out → test/dsl003/expectedrenamed

The content is the same.

test/dsl003/run.sh → test/dsl003/runrenamed

Only the mode changed.

test/dsl004/expected.out → test/dsl004/expectedrenamed

The content is the same.

test/dsl004/run.sh → test/dsl004/runrenamed

Only the mode changed.

test/effects001/expected.out → test/effects001/expectedrenamed

The content is the same.

test/effects001/run.sh → test/effects001/runrenamed

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.in" Read
34+ Success <- open "testFile" Read
3535 | (FError err) => do
3636 putStrLn "Error!"
3737 pure ()
test/effects001/testFile.in → test/effects001/testFilerenamed

The content is the same.

test/effects002/expected.out → test/effects002/expectedrenamed

The content is the same.

test/effects002/run.sh → test/effects002/runrenamed

Only the mode changed.

test/effects003/expected.out → test/effects003/expectedrenamed

The content is the same.

test/effects003/input.in → test/effects003/inputrenamed

The content is the same.

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

The content is the same.

test/effects004/input.in → test/effects004/inputrenamed

The content is the same.

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

The content is the same.

test/effects005/run.sh → test/effects005/runrenamed

Only the mode changed.

test/error001/expected.out → test/error001/expectedrenamed

The content is the same.

test/error001/run.sh → test/error001/runrenamed

Only the mode changed.

test/error002/expected.out → test/error002/expectedrenamed

The content is the same.

test/error002/run.sh → test/error002/runrenamed

Only the mode changed.

test/error003/expected.out → test/error003/expectedrenamed

The content is the same.

test/error003/run.sh → test/error003/runrenamed

Only the mode changed.

test/error004/expected.out → test/error004/expectedrenamed

The content is the same.

test/error004/run.sh → test/error004/runrenamed

Only the mode changed.

test/error005/expected.out → test/error005/expectedrenamed

The content is the same.

test/error005/run.sh → test/error005/runrenamed

Only the mode changed.

test/error006/expected.out → test/error006/expectedrenamed

The content is the same.

test/error006/run.sh → test/error006/runrenamed

Only the mode changed.

test/error007/expected.out → test/error007/expectedrenamed

The content is the same.

test/error007/run.sh → test/error007/runrenamed

Only the mode changed.

test/error008/expected.out → test/error008/expectedrenamed

The content is the same.

test/error008/run.sh → test/error008/runrenamed

Only the mode changed.

test/error009/expected.out → test/error009/expectedrenamed

The content is the same.

test/error009/run.sh → test/error009/runrenamed

Only the mode changed.

test/ffi001/expected.out → test/ffi001/expectedrenamed

The content is the same.

test/ffi001/run.sh → test/ffi001/runrenamed

Only the mode changed.

test/ffi002/expected.out → test/ffi002/expectedrenamed

The content is the same.

test/ffi002/run.sh → test/ffi002/runrenamed

Only the mode changed.

test/ffi003/expected.out → test/ffi003/expectedrenamed

The content is the same.

test/ffi003/input.in → test/ffi003/inputrenamed

The content is the same.

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

The content is the same.

test/ffi004/run.sh → test/ffi004/runrenamed

Only the mode changed.

test/ffi005/expected.out → test/ffi005/expectedrenamed

The content is the same.

test/ffi005/run.sh → test/ffi005/runrenamed

Only the mode changed.

test/ffi006/expected.out → test/ffi006/expectedrenamed

The content is the same.

test/ffi006/run.sh → test/ffi006/runrenamed

Only the mode changed.

test/ffi007/expected.out → test/ffi007/expectedrenamed

The content is the same.

test/ffi007/run.sh → test/ffi007/runrenamed

The content is the same.

test/ffi008/expected.out → test/ffi008/expectedrenamed

The content is the same.

test/ffi008/run.sh → test/ffi008/runrenamed

The content is the same.

test/ffi009/expected.out → test/ffi009/expectedrenamed

The content is the same.

test/ffi009/run.sh → test/ffi009/runrenamed

Only the mode changed.

test/ffi010/expected.out → test/ffi010/expectedrenamed

The content is the same.

test/ffi010/run.sh → test/ffi010/runrenamed

Only the mode changed.

test/ffi011/expected.out → test/ffi011/expectedrenamed

The content is the same.

test/ffi011/ffi011.js → test/ffi011/ffi011renamed

The content is the same.

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

The content is the same.

test/ffi012/ffi012.js → test/ffi012/ffi012renamed

The content is the same.

test/ffi012/run.sh → test/ffi012/runrenamed

Only the mode changed.

test/ffi013/expected.out → test/ffi013/expectedrenamed

The content is the same.

test/ffi013/run.sh → test/ffi013/runrenamed

Only the mode changed.

test/folding001/expected.out → test/folding001/expectedrenamed

The content is the same.

test/folding001/run.sh → test/folding001/runrenamed

Only the mode changed.

test/idrisdoc001/expected.out → test/idrisdoc001/expectedrenamed

The content is the same.

test/idrisdoc001/run.sh → test/idrisdoc001/runrenamed

Only the mode changed.

test/idrisdoc002/expected.out → test/idrisdoc002/expectedrenamed

The content is the same.

test/idrisdoc002/run.sh → test/idrisdoc002/runrenamed

Only the mode changed.

test/idrisdoc003/expected.out → test/idrisdoc003/expectedrenamed

The content is the same.

test/idrisdoc003/run.sh → test/idrisdoc003/runrenamed

Only the mode changed.

test/idrisdoc004/expected.out → test/idrisdoc004/expectedrenamed

The content is the same.

test/idrisdoc004/run.sh → test/idrisdoc004/runrenamed

Only the mode changed.

test/idrisdoc005/expected.out → test/idrisdoc005/expectedrenamed

The content is the same.

test/idrisdoc005/run.sh → test/idrisdoc005/runrenamed

Only the mode changed.

test/idrisdoc006/expected.out → test/idrisdoc006/expectedrenamed

The content is the same.

test/idrisdoc006/run.sh → test/idrisdoc006/runrenamed

Only the mode changed.

test/idrisdoc007/expected.out → test/idrisdoc007/expectedrenamed

The content is the same.

test/idrisdoc007/run.sh → test/idrisdoc007/runrenamed

Only the mode changed.

test/idrisdoc008/expected.out → test/idrisdoc008/expectedrenamed

The content is the same.

test/idrisdoc008/run.sh → test/idrisdoc008/runrenamed

Only the mode changed.

test/idrisdoc009/expected.out → test/idrisdoc009/expectedrenamed

The content is the same.

test/idrisdoc009/input.in → test/idrisdoc009/inputrenamed

The content is the same.

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

The content is the same.

test/interactive001/input.in → test/interactive001/inputrenamed

The content is the same.

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

The content is the same.

test/interactive002/input.in → test/interactive002/inputrenamed

The content is the same.

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

The content is the same.

test/interactive003/input.in → test/interactive003/inputrenamed

The content is the same.

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

The content is the same.

test/interactive004/input.in → test/interactive004/inputrenamed

The content is the same.

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

The content is the same.

test/interactive005/input.in → test/interactive005/inputrenamed

The content is the same.

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

The content is the same.

test/interactive006/input.in → test/interactive006/inputrenamed

The content is the same.

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

The content is the same.

test/interactive007/input.in → test/interactive007/inputrenamed

The content is the same.

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

The content is the same.

test/interactive008/input.in → test/interactive008/inputrenamed

The content is the same.

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

The content is the same.

test/interactive009/input.in → test/interactive009/inputrenamed

The content is the same.

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

The content is the same.

test/interactive010/input.in → test/interactive010/inputrenamed

The content is the same.

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

The content is the same.

test/interactive011/input.in → test/interactive011/inputrenamed

The content is the same.

test/interactive011/run.sh → test/interactive011/runrenamed+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.in
4+${IDRIS:-idris} "$@" --quiet --port none --indent-clause 4 Main.idr <../input
55
66rm -f *.ibc
test/interactive012/expected.out → test/interactive012/expectedrenamed

The content is the same.

test/interactive012/input.in → test/interactive012/inputrenamed

The content is the same.

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

The content is the same.

test/interactive013/input.in → test/interactive013/inputrenamed

The content is the same.

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

The content is the same.

test/interactive014/input.in → test/interactive014/inputrenamed

The content is the same.

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

The content is the same.

test/interactive015/input.in → test/interactive015/inputrenamed

The content is the same.

test/interactive015/run.sh → test/interactive015/runrenamed+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.in
4+${IDRIS:-idris} "$@" --quiet --port none interactive015.idr < input
55
66cat interactive015.idr
77
test/interactive016/expected.out → test/interactive016/expectedrenamed

The content is the same.

test/interactive016/input.in → test/interactive016/inputrenamed

The content is the same.

test/interactive016/run.sh → test/interactive016/runrenamed+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.in
4+${IDRIS:-idris} "$@" --quiet --port none interactive016.idr < input
55
66cat interactive016.idr
77
test/interactive017/expected.out → test/interactive017/expectedrenamed

The content is the same.

test/interactive017/run.sh → test/interactive017/runrenamed

Only the mode changed.

test/interactive018/expected.out → test/interactive018/expectedrenamed

The content is the same.

test/interactive018/input.in → test/interactive018/inputrenamed

The content is the same.

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

The content is the same.

test/interfaces001/input.in → test/interfaces001/inputrenamed

The content is the same.

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

The content is the same.

test/interfaces002/run.sh → test/interfaces002/runrenamed

Only the mode changed.

test/interfaces003/expected.out → test/interfaces003/expectedrenamed

The content is the same.

test/interfaces003/run.sh → test/interfaces003/runrenamed

Only the mode changed.

test/interfaces004/expected.out → test/interfaces004/expectedrenamed

The content is the same.

test/interfaces004/run.sh → test/interfaces004/runrenamed

Only the mode changed.

test/interfaces005/expected.out → test/interfaces005/expectedrenamed

The content is the same.

test/interfaces005/run.sh → test/interfaces005/runrenamed

Only the mode changed.

test/interfaces006/expected.out → test/interfaces006/expectedrenamed

The content is the same.

test/interfaces006/run.sh → test/interfaces006/runrenamed

Only the mode changed.

test/interfaces007/expected.out → test/interfaces007/expectedrenamed

The content is the same.

test/interfaces007/run.sh → test/interfaces007/runrenamed

Only the mode changed.

test/interfaces008/expected.out → test/interfaces008/expectedrenamed

The content is the same.

test/interfaces008/run.sh → test/interfaces008/runrenamed

Only the mode changed.

test/interfaces009/expected.out → test/interfaces009/expectedrenamed

The content is the same.

test/interfaces009/run.sh → test/interfaces009/runrenamed

Only the mode changed.

test/interfaces010/expected.out → test/interfaces010/expectedrenamed

The content is the same.

test/interfaces010/run.sh → test/interfaces010/runrenamed

Only the mode changed.

test/interpret001/expected.out → test/interpret001/expectedrenamed

The content is the same.

test/interpret001/input.in → test/interpret001/inputrenamed

The content is the same.

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

The content is the same.

test/interpret002/input.in → test/interpret002/inputrenamed

The content is the same.

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

The content is the same.

test/interpret003/input.in → test/interpret003/inputrenamed

The content is the same.

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

The content is the same.

test/io001/run.sh → test/io001/runrenamed

Only the mode changed.

test/io002/expected.out → test/io002/expectedrenamed

The content is the same.

test/io002/run.sh → test/io002/runrenamed

Only the mode changed.

test/io003/expected.out → test/io003/expectedrenamed

The content is the same.

test/io003/run.sh → test/io003/runrenamed

Only the mode changed.

test/layout001/expected.out → test/layout001/expectedrenamed

The content is the same.

test/layout001/run.sh → test/layout001/runrenamed

Only the mode changed.

test/literate001/expected.out → test/literate001/expectedrenamed

The content is the same.

test/literate001/run.sh → test/literate001/runrenamed

Only the mode changed.

test/meta001/expected.out → test/meta001/expectedrenamed

The content is the same.

test/meta001/run.sh → test/meta001/runrenamed

Only the mode changed.

test/meta002/expected.out → test/meta002/expectedrenamed

The content is the same.

test/meta002/run.sh → test/meta002/runrenamed

Only the mode changed.

test/meta003/expected.out → test/meta003/expectedrenamed

The content is the same.

test/meta003/run.sh → test/meta003/runrenamed

Only the mode changed.

test/meta004/expected.out → test/meta004/expectedrenamed

The content is the same.

test/meta004/run.sh → test/meta004/runrenamed

Only the mode changed.

test/pkg001/expected.out → test/pkg001/expectedrenamed

The content is the same.

test/pkg001/run.sh → test/pkg001/runrenamed

Only the mode changed.

test/pkg002/expected.out → test/pkg002/expectedrenamed

The content is the same.

test/pkg002/run.sh → test/pkg002/runrenamed

Only the mode changed.

test/pkg003/expected.out → test/pkg003/expectedrenamed

The content is the same.

test/pkg003/run.sh → test/pkg003/runrenamed

Only the mode changed.

test/pkg004/expected.out → test/pkg004/expectedrenamed

The content is the same.

test/pkg004/run.sh → test/pkg004/runrenamed

Only the mode changed.

test/pkg005/expected.out → test/pkg005/expectedrenamed

The content is the same.

test/pkg005/run.sh → test/pkg005/runrenamed

Only the mode changed.

test/pkg006/expected.out → test/pkg006/expectedrenamed

The content is the same.

test/pkg006/run.sh → test/pkg006/runrenamed

Only the mode changed.

test/pkg007/expected.out → test/pkg007/expectedrenamed

The content is the same.

test/pkg007/input.in → test/pkg007/inputrenamed

The content is the same.

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

The content is the same.

test/pkg008/run.sh → test/pkg008/runrenamed

Only the mode changed.

test/pkg009/expected.out → test/pkg009/expectedrenamed

The content is the same.

test/pkg009/run.sh → test/pkg009/runrenamed

Only the mode changed.

test/pkg010/expectednew file+31
@@ -0,0 +1,31 @@
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.outdeleted−29
@@ -1,29 +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 | --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.sh → test/pkg010/runrenamed

Only the mode changed.

test/prelude001/expected.out → test/prelude001/expectedrenamed

The content is the same.

test/prelude001/run.sh → test/prelude001/runrenamed

Only the mode changed.

test/primitives001/expected.out → test/primitives001/expectedrenamed

The content is the same.

test/primitives001/input.in → test/primitives001/inputrenamed

The content is the same.

test/primitives001/run.sh → test/primitives001/runrenamed+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.in
5+./substring < input
66rm -f test005 substring *.ibc
test/primitives002/expected.out → test/primitives002/expectedrenamed

The content is the same.

test/primitives002/run.sh → test/primitives002/runrenamed

Only the mode changed.

test/primitives003/expected.out → test/primitives003/expectedrenamed

The content is the same.

test/primitives003/run.sh → test/primitives003/runrenamed

Only the mode changed.

test/primitives004-disabled/expected.out → test/primitives004-disabled/expectedrenamed

The content is the same.

test/primitives004-disabled/run.sh → test/primitives004-disabled/runrenamed

Only the mode changed.

test/primitives005/expected.out → test/primitives005/expectedrenamed

The content is the same.

test/primitives005/run.sh → test/primitives005/runrenamed

The content is the same.

test/primitives006/expected.out → test/primitives006/expectedrenamed

The content is the same.

test/primitives006/run.sh → test/primitives006/runrenamed

Only the mode changed.

test/proof001/expected.out → test/proof001/expectedrenamed

The content is the same.

test/proof001/run.sh → test/proof001/runrenamed

Only the mode changed.

test/proof002/expected.out → test/proof002/expectedrenamed

The content is the same.

test/proof002/run.sh → test/proof002/runrenamed

Only the mode changed.

test/proof003/expected.out → test/proof003/expectedrenamed

The content is the same.

test/proof003/run.sh → test/proof003/runrenamed

Only the mode changed.

test/proof004/expected.out → test/proof004/expectedrenamed

The content is the same.

test/proof004/run.sh → test/proof004/runrenamed

Only the mode changed.

test/proof005/expected.out → test/proof005/expectedrenamed

The content is the same.

test/proof005/run.sh → test/proof005/runrenamed

Only the mode changed.

test/proof006/expected.out → test/proof006/expectedrenamed

The content is the same.

test/proof006/run.sh → test/proof006/runrenamed

Only the mode changed.

test/proof007/expected.out → test/proof007/expectedrenamed

The content is the same.

test/proof007/run.sh → test/proof007/runrenamed

Only the mode changed.

test/proof008/expected.out → test/proof008/expectedrenamed

The content is the same.

test/proof008/run.sh → test/proof008/runrenamed

Only the mode changed.

test/proof009/expected.out → test/proof009/expectedrenamed

The content is the same.

test/proof009/input.in → test/proof009/inputrenamed

The content is the same.

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

The content is the same.

test/proof010/run.sh → test/proof010/runrenamed

Only the mode changed.

test/proof011/expected.out → test/proof011/expectedrenamed

The content is the same.

test/proof011/run.sh → test/proof011/runrenamed

Only the mode changed.

test/proofsearch001/expected.out → test/proofsearch001/expectedrenamed

The content is the same.

test/proofsearch001/run.sh → test/proofsearch001/runrenamed

Only the mode changed.

test/proofsearch002/expected.out → test/proofsearch002/expectedrenamed

The content is the same.

test/proofsearch002/run.sh → test/proofsearch002/runrenamed

Only the mode changed.

test/proofsearch003/expected.out → test/proofsearch003/expectedrenamed

The content is the same.

test/proofsearch003/run.sh → test/proofsearch003/runrenamed

Only the mode changed.

test/pruviloj001/expected.out → test/pruviloj001/expectedrenamed

The content is the same.

test/pruviloj001/run.sh → test/pruviloj001/runrenamed

Only the mode changed.

test/quasiquote001/expected.out → test/quasiquote001/expectedrenamed

The content is the same.

test/quasiquote001/run.sh → test/quasiquote001/runrenamed

Only the mode changed.

test/quasiquote002/expected.out → test/quasiquote002/expectedrenamed

The content is the same.

test/quasiquote002/run.sh → test/quasiquote002/runrenamed

Only the mode changed.

test/quasiquote003/expected.out → test/quasiquote003/expectedrenamed

The content is the same.

test/quasiquote003/run.sh → test/quasiquote003/runrenamed

Only the mode changed.

test/quasiquote004/expected.out → test/quasiquote004/expectedrenamed

The content is the same.

test/quasiquote004/run.sh → test/quasiquote004/runrenamed

Only the mode changed.

test/quasiquote005/expected.out → test/quasiquote005/expectedrenamed

The content is the same.

test/quasiquote005/run.sh → test/quasiquote005/runrenamed

Only the mode changed.

test/quasiquote006/expected.out → test/quasiquote006/expectedrenamed

The content is the same.

test/quasiquote006/run.sh → test/quasiquote006/runrenamed

Only the mode changed.

test/records001/expected.out → test/records001/expectedrenamed

The content is the same.

test/records001/run.sh → test/records001/runrenamed

Only the mode changed.

test/records002/expected.out → test/records002/expectedrenamed

The content is the same.

test/records002/run.sh → test/records002/runrenamed

Only the mode changed.

test/records003/expected.out → test/records003/expectedrenamed

The content is the same.

test/records003/run.sh → test/records003/runrenamed

Only the mode changed.

test/records004/expected.out → test/records004/expectedrenamed

The content is the same.

test/records004/run.sh → test/records004/runrenamed

Only the mode changed.

test/records005/expected.out → test/records005/expectedrenamed

The content is the same.

test/records005/run.sh → test/records005/runrenamed

Only the mode changed.

test/reg001/expected.out → test/reg001/expectedrenamed

The content is the same.

test/reg001/run.sh → test/reg001/runrenamed

Only the mode changed.

test/reg002/expected.out → test/reg002/expectedrenamed

The content is the same.

test/reg002/run.sh → test/reg002/runrenamed

Only the mode changed.

test/reg004/expected.out → test/reg004/expectedrenamed

The content is the same.

test/reg004/run.sh → test/reg004/runrenamed

Only the mode changed.

test/reg005/expected.out → test/reg005/expectedrenamed

The content is the same.

test/reg005/run.sh → test/reg005/runrenamed

Only the mode changed.

test/reg007/expected.out → test/reg007/expectedrenamed

The content is the same.

test/reg007/run.sh → test/reg007/runrenamed

Only the mode changed.

test/reg013/expected.out → test/reg013/expectedrenamed

The content is the same.

test/reg013/run.sh → test/reg013/runrenamed

Only the mode changed.

test/reg016/expected.out → test/reg016/expectedrenamed

The content is the same.

test/reg016/run.sh → test/reg016/runrenamed

Only the mode changed.

test/reg017/expected.out → test/reg017/expectedrenamed

The content is the same.

test/reg017/run.sh → test/reg017/runrenamed

Only the mode changed.

test/reg020/expected.out → test/reg020/expectedrenamed

The content is the same.

test/reg020/run.sh → test/reg020/runrenamed

Only the mode changed.

test/reg024/expected.out → test/reg024/expectedrenamed

The content is the same.

test/reg024/run.sh → test/reg024/runrenamed

Only the mode changed.

test/reg025/expected.out → test/reg025/expectedrenamed

The content is the same.

test/reg025/run.sh → test/reg025/runrenamed

Only the mode changed.

test/reg027/expected.out → test/reg027/expectedrenamed

The content is the same.

test/reg027/run.sh → test/reg027/runrenamed

Only the mode changed.

test/reg029/expected.out → test/reg029/expectedrenamed

The content is the same.

test/reg029/run.sh → test/reg029/runrenamed

Only the mode changed.

test/reg031/expected.out → test/reg031/expectedrenamed

The content is the same.

test/reg031/run.sh → test/reg031/runrenamed

Only the mode changed.

test/reg032/expected.out → test/reg032/expectedrenamed

The content is the same.

test/reg032/run.sh → test/reg032/runrenamed

Only the mode changed.

test/reg039/expected.out → test/reg039/expectedrenamed

The content is the same.

test/reg039/run.sh → test/reg039/runrenamed

Only the mode changed.

test/reg040/expected.out → test/reg040/expectedrenamed

The content is the same.

test/reg040/run.sh → test/reg040/runrenamed

Only the mode changed.

test/reg041/expected.out → test/reg041/expectedrenamed

The content is the same.

test/reg041/run.sh → test/reg041/runrenamed

Only the mode changed.

test/reg042/expected.out → test/reg042/expectedrenamed

The content is the same.

test/reg042/run.sh → test/reg042/runrenamed

Only the mode changed.

test/reg045/expected.out → test/reg045/expectedrenamed

The content is the same.

test/reg045/run.sh → test/reg045/runrenamed

Only the mode changed.

test/reg048/expected.out → test/reg048/expectedrenamed

The content is the same.

test/reg048/run.sh → test/reg048/runrenamed

Only the mode changed.

test/reg051-disabled/expected.out → test/reg051-disabled/expectedrenamed

The content is the same.

test/reg051-disabled/run.sh → test/reg051-disabled/runrenamed

Only the mode changed.

test/reg052/expected.out → test/reg052/expectedrenamed

The content is the same.

test/reg052/run.sh → test/reg052/runrenamed

Only the mode changed.

test/reg067/expected.out → test/reg067/expectedrenamed

The content is the same.

test/reg067/run.sh → test/reg067/runrenamed

Only the mode changed.

test/reg075/expected.out → test/reg075/expectedrenamed

The content is the same.

test/reg075/input.in → test/reg075/inputrenamed

The content is the same.

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

The content is the same.

test/reg076/input.in → test/reg076/inputrenamed

The content is the same.

test/reg076/run.sh → test/reg076/runrenamed

Only the mode changed.

test/reg077/expected.out → test/reg077/expectedrenamed

The content is the same.

test/reg077/run.sh → test/reg077/runrenamed

Only the mode changed.

test/regression001/expected.out → test/regression001/expectedrenamed

The content is the same.

test/regression001/run.sh → test/regression001/runrenamed

Only the mode changed.

test/regression002/expected.out → test/regression002/expectedrenamed

The content is the same.

test/regression002/run.sh → test/regression002/runrenamed

Only the mode changed.

test/regression003/expected.out → test/regression003/expectedrenamed

The content is the same.

test/regression003/run.sh → test/regression003/runrenamed

Only the mode changed.

test/sourceLocation001/expected.out → test/sourceLocation001/expectedrenamed

The content is the same.

test/sourceLocation001/run.sh → test/sourceLocation001/runrenamed

Only the mode changed.

test/st001/expected.out → test/st001/expectedrenamed

The content is the same.

test/st001/run.sh → test/st001/runrenamed

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.in" Read
43+ Right fileHandle <- open "testFile" Read
4444 | Left ferr => do putStrLn (show ferr)
4545 pure ()
4646 count <- new 0
test/st001/testFile.in → test/st001/testFilerenamed

The content is the same.

test/st002/expected.out → test/st002/expectedrenamed

The content is the same.

test/st002/run.sh → test/st002/runrenamed

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.in" Read
43+ Right fileHandle <- open "testFile" Read
4444 | Left ferr => do putStrLn (show ferr)
4545 pure ()
4646 count <- new 0
test/st002/testFile.in → test/st002/testFilerenamed

The content is the same.

test/st003/expected.out → test/st003/expectedrenamed

The content is the same.

test/st003/run.sh → test/st003/runrenamed

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.in"
10+ Right str <- readFile "testFile"
1111 | Left ferr => do putStrLn (show ferr)
1212 pure ()
1313 putStrLn str
test/st003/testFile.in → test/st003/testFilerenamed

The content is the same.

test/st004/expected.out → test/st004/expectedrenamed

The content is the same.

test/st004/run.sh → test/st004/runrenamed

Only the mode changed.

test/st005/expected.out → test/st005/expectedrenamed

The content is the same.

test/st005/run.sh → test/st005/runrenamed

Only the mode changed.

test/st006/expected.out → test/st006/expectedrenamed

The content is the same.

test/st006/run.sh → test/st006/runrenamed

Only the mode changed.

test/st007/expected.out → test/st007/expectedrenamed

The content is the same.

test/st007/run.sh → test/st007/runrenamed

Only the mode changed.

test/sugar001/expected.out → test/sugar001/expectedrenamed

The content is the same.

test/sugar001/run.sh → test/sugar001/runrenamed

Only the mode changed.

test/sugar002/expected.out → test/sugar002/expectedrenamed

The content is the same.

test/sugar002/run.sh → test/sugar002/runrenamed

Only the mode changed.

test/sugar003/expected.out → test/sugar003/expectedrenamed

The content is the same.

test/sugar003/run.sh → test/sugar003/runrenamed

Only the mode changed.

test/sugar004/expected.out → test/sugar004/expectedrenamed

The content is the same.

test/sugar004/run.sh → test/sugar004/runrenamed

Only the mode changed.

test/sugar005/expected.out → test/sugar005/expectedrenamed

The content is the same.

test/sugar005/run.sh → test/sugar005/runrenamed

Only the mode changed.

test/syntax001/expected.out → test/syntax001/expectedrenamed

The content is the same.

test/syntax001/run.sh → test/syntax001/runrenamed

Only the mode changed.

test/syntax002/expected.out → test/syntax002/expectedrenamed

The content is the same.

test/syntax002/run.sh → test/syntax002/runrenamed

Only the mode changed.

test/tactics001/expected.out → test/tactics001/expectedrenamed

The content is the same.

test/tactics001/run.sh → test/tactics001/runrenamed

Only the mode changed.

test/totality001/expected.out → test/totality001/expectedrenamed

The content is the same.

test/totality001/run.sh → test/totality001/runrenamed

Only the mode changed.

test/totality002/expected.out → test/totality002/expectedrenamed

The content is the same.

test/totality002/run.sh → test/totality002/runrenamed

Only the mode changed.

test/totality003/expected.out → test/totality003/expectedrenamed

The content is the same.

test/totality003/run.sh → test/totality003/runrenamed

Only the mode changed.

test/totality004/expected.out → test/totality004/expectedrenamed

The content is the same.

test/totality004/run.sh → test/totality004/runrenamed

Only the mode changed.

test/totality005/expected.out → test/totality005/expectedrenamed

The content is the same.

test/totality005/run.sh → test/totality005/runrenamed

Only the mode changed.

test/totality006/expected.out → test/totality006/expectedrenamed

The content is the same.

test/totality006/run.sh → test/totality006/runrenamed

Only the mode changed.

test/totality007/expected.out → test/totality007/expectedrenamed

The content is the same.

test/totality007/run.sh → test/totality007/runrenamed

Only the mode changed.

test/totality008/expected.out → test/totality008/expectedrenamed

The content is the same.

test/totality008/run.sh → test/totality008/runrenamed

Only the mode changed.

test/totality009/expected.out → test/totality009/expectedrenamed

The content is the same.

test/totality009/run.sh → test/totality009/runrenamed

Only the mode changed.

test/totality010/expected.out → test/totality010/expectedrenamed

The content is the same.

test/totality010/run.sh → test/totality010/runrenamed

Only the mode changed.

test/totality011/expected.out → test/totality011/expectedrenamed

The content is the same.

test/totality011/run.sh → test/totality011/runrenamed

Only the mode changed.

test/totality012/expected.out → test/totality012/expectedrenamed

The content is the same.

test/totality012/run.sh → test/totality012/runrenamed

Only the mode changed.

test/totality013/expected.out → test/totality013/expectedrenamed

The content is the same.

test/totality013/run.sh → test/totality013/runrenamed

Only the mode changed.

test/totality014/expected.out → test/totality014/expectedrenamed

The content is the same.

test/totality014/run.sh → test/totality014/runrenamed

Only the mode changed.

test/totality015/expected.out → test/totality015/expectedrenamed

The content is the same.

test/totality015/run.sh → test/totality015/runrenamed

Only the mode changed.

test/totality016/expected.out → test/totality016/expectedrenamed

The content is the same.

test/totality016/run.sh → test/totality016/runrenamed

Only the mode changed.

test/totality017/expected.out → test/totality017/expectedrenamed

The content is the same.

test/totality017/run.sh → test/totality017/runrenamed

Only the mode changed.

test/totality018/expected.out → test/totality018/expectedrenamed

The content is the same.

test/totality018/run.sh → test/totality018/runrenamed

Only the mode changed.

test/totality019/expected.out → test/totality019/expectedrenamed

The content is the same.

test/totality019/run.sh → test/totality019/runrenamed

Only the mode changed.

test/totality020/expected.out → test/totality020/expectedrenamed

The content is the same.

test/totality020/run.sh → test/totality020/runrenamed

Only the mode changed.

test/totality021/expected.out → test/totality021/expectedrenamed

The content is the same.

test/totality021/run.sh → test/totality021/runrenamed

Only the mode changed.

test/totality022/expected.out → test/totality022/expectedrenamed

The content is the same.

test/totality022/run.sh → test/totality022/runrenamed

Only the mode changed.

test/totality023/expected.out → test/totality023/expectedrenamed

The content is the same.

test/totality023/run.sh → test/totality023/runrenamed

Only the mode changed.

test/totality024/expected.out → test/totality024/expectedrenamed

The content is the same.

test/totality024/run.sh → test/totality024/runrenamed

Only the mode changed.

test/totality025/expected.out → test/totality025/expectedrenamed

The content is the same.

test/totality025/run.sh → test/totality025/runrenamed

Only the mode changed.

test/totality026/expected.out → test/totality026/expectedrenamed

The content is the same.

test/totality026/run.sh → test/totality026/runrenamed

Only the mode changed.

test/tutorial001/expected.out → test/tutorial001/expectedrenamed

The content is the same.

test/tutorial001/run.sh → test/tutorial001/runrenamed

Only the mode changed.

test/tutorial002/expected.out → test/tutorial002/expectedrenamed

The content is the same.

test/tutorial002/run.sh → test/tutorial002/runrenamed

Only the mode changed.

test/tutorial003/expected.out → test/tutorial003/expectedrenamed

The content is the same.

test/tutorial003/run.sh → test/tutorial003/runrenamed

Only the mode changed.

test/tutorial004/expected.out → test/tutorial004/expectedrenamed

The content is the same.

test/tutorial004/run.sh → test/tutorial004/runrenamed

Only the mode changed.

test/tutorial005/expected.out → test/tutorial005/expectedrenamed

The content is the same.

test/tutorial005/run.sh → test/tutorial005/runrenamed

Only the mode changed.

test/tutorial006/expected.out → test/tutorial006/expectedrenamed

The content is the same.

test/tutorial006/run.sh → test/tutorial006/runrenamed

Only the mode changed.

test/tutorial007/expected.out → test/tutorial007/expectedrenamed

The content is the same.

test/tutorial007/run.sh → test/tutorial007/runrenamed

Only the mode changed.

test/unique001/expected.out → test/unique001/expectedrenamed

The content is the same.

test/unique001/run.sh → test/unique001/runrenamed

Only the mode changed.

test/unique004/expected.out → test/unique004/expectedrenamed

The content is the same.

test/unique004/run.sh → test/unique004/runrenamed

Only the mode changed.

test/universes001/expected.out → test/universes001/expectedrenamed

The content is the same.

test/universes001/run.sh → test/universes001/runrenamed

Only the mode changed.

test/universes002/expected.out → test/universes002/expectedrenamed

The content is the same.

test/universes002/run.sh → test/universes002/runrenamed

Only the mode changed.

test/views001/expected.out → test/views001/expectedrenamed

The content is the same.

test/views001/run.sh → test/views001/runrenamed

Only the mode changed.

test/views002/expected.out → test/views002/expectedrenamed

The content is the same.

test/views002/run.sh → test/views002/runrenamed

Only the mode changed.

test/views003/expected.out → test/views003/expectedrenamed

The content is the same.

test/views003/run.sh → test/views003/runrenamed

Only the mode changed.