*.root
.direnv/
.ghc.environment.*
+.pre-commit-config.yaml
.stack-work/
-dist/
dist-newstyle/
+dist/
dump-core/
hlint.html
+libs/
+old/
result*
-.pre-commit-config.yaml
.PHONY: tests
t tests:
cabal test $(CABAL_TEST_FLAGS) \
- --test-show-details always --test-options "$(TEST_OPTIONS)"
+ --test-show-details streaming --test-options "$(TEST_OPTIONS)"
t/repl tests/repl:
cabal repl $(CABAL_REPL_FLAGS) $(CABAL_TEST_FLAGS) $(project)-tests
t/ghcid tests/ghcid:
style:
find $(sourceDirs) -name "*.hs" | xargs -P $(shell nproc) -I {} \
- fourmolu -q -o -XOverloadedLabels -o -XImportQualifiedPost --mode inplace {}
+ fourmolu --unsafe -q -o -XOverloadedLabels -o -XImportQualifiedPost --mode inplace {}
cabal-fmt -i *.cabal
SPDX-PackageDownloadLocation = "https://git.sourcephile.fr/haskell/worksheets"
[[annotations]]
-path = ["**.nix", "**.lock", "cabal.project", "**.cabal", "**.md", "**.toml", ".chglog/**", ".envrc", "fourmolu.yaml", ".gitignore", ".hlint.yaml", "Makefile"]
+path = [".ghci", "cabal.project*", "**.nix", "**.lock", "cabal.project", "**.cabal", "**.md", "**.toml", ".chglog/**", ".envrc", "fourmolu.yaml", ".gitignore", ".hlint.yaml", "Makefile"]
precedence = "aggregate"
SPDX-FileCopyrightText = "Julien Moutinho <julm+worksheets@sourcephile.fr>"
SPDX-License-Identifier = "CC0-1.0"
precedence = "aggregate"
SPDX-FileCopyrightText = "Julien Moutinho <julm+worksheets@sourcephile.fr>"
SPDX-License-Identifier = "AGPL-3.0-or-later"
+
+[[annotations]]
+path = ["data/**"]
+precedence = "aggregate"
+SPDX-FileCopyrightText = "???"
+SPDX-License-Identifier = "CC0-1.0"
--- /dev/null
+*.avif
+*.jpg
+*.jsonl
+*.sqlite
+*.ttl
+*.webp
+langs
--- /dev/null
+body { margin:0; }
+@page { margin:0; }
+.sheet {
+ overflow:hidden;
+ position:relative;
+ box-sizing:border-box;
+ page-break-after:always;
+}
+
+/** Paper sizes **/
+.sheet.A3 { width: 297mm; height: 419mm }
+.sheet.A3.landscape { width: 420mm; height: 296mm }
+.sheet.A4 { width: 210mm; height: 296mm }
+.sheet.A4.landscape { width: 297mm; height: 209mm }
+.sheet.A4plus { width: 240mm; height: 320mm }
+.sheet.A4plus.landscape { width: 320mm; height: 240mm }
+.sheet.A5 { width: 148mm; height: 209mm }
+.sheet.A5.landscape { width: 210mm; height: 147mm }
+.sheet.letter { width: 216mm; height: 279mm }
+.sheet.letter.landscape { width: 280mm; height: 215mm }
+.sheet.legal { width: 216mm; height: 356mm }
+.sheet.legal.landscape { width: 357mm; height: 215mm }
+
+/** For screen preview **/
+@media screen {
+ body { background:#e0e0e0 }
+ .sheet {
+ background:white;
+ box-shadow:0 .5mm 2mm rgba(0,0,0,.3);
+ margin:5mm auto !important;
+ }
+}
+
+/** Fix for Chrome issue #273306
+@media print {
+ body.A3.landscape { width: 420mm }
+ body.A3, body.A4.landscape { width: 297mm }
+ body.A4, body.A5.landscape { width: 210mm }
+ body.A5 { width: 148mm }
+ body.letter, body.legal { width: 216mm }
+ body.letter.landscape { width: 280mm }
+ body.legal.landscape { width: 357mm }
+}
+**/
--- /dev/null
+.lang-LangueMandarin.sentence {
+ /* FIXME: should derive from Difficulties */
+ column-gap:0 !important;
+}
+.sentence {
+}
+.sentence-horiz {
+ display:flex;
+ flex-direction:row;
+ flex-wrap:nowrap;
+ margin:0 0 0 0;
+ align-self:flex-start;
+}
+.sentence-word {
+ margin:0 0 0 0;
+ display:grid;
+ //gap:1px;
+ /* ExplanationNote: avoid rounded borders to be cropped by background-color: */
+ overflow: hidden;
+ /*
+ border-top-left-radius:3mm;
+ border-top-right-radius:3mm;
+ */
+}
+.sentence-word:last-child {
+ margin-right:0;
+}
+.sentence-cell {
+ display:grid;
+ background-color:white;
+ font-family:monospace;
+ font-variant:small-caps;
+ justify-self:center;
+ margin-left:0;
+ margin-right:0;
+ padding-left:0;
+ padding-right:0;
+ align-content:center;
+ justify-content:center;
+ position:relative;
+ white-space:preserve-spaces;
+ width:100%
+}
+.sentence-cell.pronunciation {
+ font-variant:normal;
+ font-weight:bold;
+ font-family:Arial;
+ font-size:0.35cm;
+ height:0.45cm;
+}
+.sentence-cell.input {
+ color:#ddd;
+ //border:1px solid #aaa;
+}
+.sentence-cell.input.break .cell {
+ border-left:0 !important;
+ border-top:0 !important;
+ border-bottom:0 !important;
+ border-right:0 !important;
+}
+.sentence-word.word-index-0 .sentence-cell.input.input-index-1 .cell {
+ border-left:1px solid #aaa;
+}
+.sentence-word .sentence-cell.input .cell
+{
+ border-top:1px solid #aaa;
+ border-bottom:1px solid #aaa;
+ border-right:1px solid #aaa;
+ //border-left:1px solid #aaa;
+ position:absolute;
+ left:0;
+ right:0;
+ bottom:0;
+ top:0;
+}
+.sentence-cell.input.script-UnicodeBlockCJK-UnicodeBlockCJK-Unified-Ideographs .cell {
+ border:0 !important;
+ position:relative !important;
+}
+/* Compress a bit the height
+ */
+.sentence-cell.model.script-UnicodeBlockLatin-UnicodeBlockLatin-Basic,
+.sentence-cell.model.script-UnicodeBlockLatin-UnicodeBlockLatin-ExtendedA,
+.sentence-cell.model.script-UnicodeBlockLatin-UnicodeBlockLatin1-Supplement,
+.sentence-cell.model.script-UnicodeBlockMiscellaneous-Technical {
+ //height:6mm;
+}
+.sentence-cell.input.script-UnicodeBlockLatin-UnicodeBlockLatin-Basic {
+ //border-bottom:1px solid #aaa;
+ //border-top:1px solid #aaa;
+}
+.sentence-cell.input.hidden {
+ color:transparent;
+}
+.sentence-cell.break {
+ width:3mm;
+}
+.sentence-cell.model.break {
+ color:#ddd;
+}
+.sentence-cell {
+ --pronunciation-even:#ffaa5770;
+ --pronunciation-odd:#82c1ff70;
+ --pronunciation-border-size:3px;
+ --pronunciation-silent:transparent;
+}
+.lang-LangueFrançais .sentence-cell {
+ --pronunciation-odd:darkblue;
+ --pronunciation-even:lightblue;
+ //--pronunciation-odd:#82c1ff70;
+ //--pronunciation-even:#0055A470;
+ //--pronunciation-odd:#c8e4ff;
+ //--pronunciation-even:#8fb4d7;
+}
+.lang-LangueAnglais .sentence-cell {
+ --pronunciation-odd:darkgreen;
+ --pronunciation-even:lightgreen;
+ //--pronunciation-odd:#a9ed8f;
+ //--pronunciation-even:#76c69e;
+ //--pronunciation-odd:#3dd70070;
+ //--pronunciation-even:#40846270;
+}
+.lang-LangueMandarin .sentence-cell {
+ --pronunciation-odd:darkred;
+ --pronunciation-even:#FF7276;
+ //--pronunciation-odd:#ff8f8f;
+ //--pronunciation-even:#e3b68f;
+ //--pronunciation-odd:#ff000070;
+ //--pronunciation-even:#bf5a0070;
+}
+
+/* .cell-even */
+
+.sentence-cell.pronunciation.cell-even {
+ border-bottom:var(--pronunciation-border-size) solid var(--pronunciation-even);
+ color:var(--pronunciation-even);
+}
+.sentence-cell.pronunciation.cell-even.cell-split {
+ background:linear-gradient(to right,var(--pronunciation-even),var(--pronunciation-odd));
+ background-clip:text;
+ color:transparent;
+ border-image-source:linear-gradient(to right,var(--pronunciation-even),var(--pronunciation-odd));
+ border-image-slice:1;
+}
+.sentence-cell.pronunciation.cell-even.cell-depends-on-before:before {
+ position:absolute;
+ display:block;
+ content:'';
+ border-left:var(--pronunciation-border-size) solid var(--pronunciation-even);
+ bottom:0;
+ height:4px;
+ width:var(--pronunciation-border-size);
+ box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-even.cell-depends-on-after:after {
+ position:absolute;
+ display:block;
+ content:'';
+ border-right:var(--pronunciation-border-size) solid var(--pronunciation-even);
+ height:4px;
+ bottom:0;
+ right:0;
+ width:var(--pronunciation-border-size);
+ box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-even.cell-depends-on-meaning:before {
+ position:absolute;
+ display:block;
+ content:'';
+ bottom:0;
+ height:4px;
+ width:var(--pronunciation-border-size);
+ box-sizing:border-box;
+ width:100%;
+ border-bottom:var(--pronunciation-border-size) dotted var(--pronunciation-even);
+}
+
+/* .cell-odd */
+
+.sentence-cell.pronunciation.cell-odd {
+ border-bottom:var(--pronunciation-border-size) solid var(--pronunciation-odd);
+ color:var(--pronunciation-odd);
+}
+.sentence-cell.pronunciation.cell-odd.cell-split {
+ background:linear-gradient(to right,var(--pronunciation-odd),var(--pronunciation-even));
+ background-clip:text;
+ color:transparent;
+ border-image-source:linear-gradient(to right,var(--pronunciation-odd),var(--pronunciation-even));
+ border-image-slice:1;
+}
+.sentence-cell.pronunciation.cell-odd.cell-depends-on-before:before {
+ position:absolute;
+ display:block;
+ content:'';
+ border-left:var(--pronunciation-border-size) solid var(--pronunciation-odd);
+ bottom:0;
+ height:4px;
+ box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-odd.cell-depends-on-after:after {
+ position:absolute;
+ display:block;
+ content:'';
+ right:0;
+ bottom:0;
+ border-right:var(--pronunciation-border-size) solid var(--pronunciation-odd);
+ height:4px;
+ box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-odd.cell-depends-on-meaning:after {
+ position:absolute;
+ display:block;
+ content:'';
+ right:0;
+ bottom:0;
+ height:4px;
+ box-sizing:border-box;
+ width:100%;
+ border-bottom:var(--pronunciation-border-size) dotted var(--pronunciation-odd);
+}
+
+/* .cell-silent */
+
+.sentence-cell.pronunciation.cell-silent {
+ border-bottom:var(--pronunciation-border-size) solid var(--pronunciation-silent);
+ color:var(--pronunciation-silent);
+}
+.sentence-cell.pronunciation.cell-silent.cell-depends-on-before:before {
+ position:absolute;
+ display:block;
+ content:'';
+ border-left:var(--pronunciation-border-size) solid var(--pronunciation-silent);
+ bottom:0;
+ height:4px;
+ box-sizing:border-box;
+}
+.sentence-cell.pronunciation.cell-silent.cell-depends-on-after:after {
+ position:absolute;
+ display:block;
+ content:'';
+ right:0;
+ bottom:0;
+ border-right:var(--pronunciation-border-size) solid var(--pronunciation-silent);
+ height:4px;
+ box-sizing:border-box;
+}
--- /dev/null
+.sub-page {
+ //margin:2mm !important;
+}
+.main-page {
+ //background-color:white !important;
+}
+.rosetta-reading {
+ margin:0mm;
+ /* ExplanationNote: even when printing with the option "Shrink to Print Area"
+ * pixels too close to the border can get cropped.
+ */
+ padding:1mm;
+ display:grid;
+ ////column-gap:1mm;
+ //row-gap:1mm;
+ justify-content:space-evenly;
+ //align-items:space-between;
+ align-content:space-around;
+}
+.cards {
+ border:1px solid #aaa;
+ display:grid;
+ gap:1px;
+ align-content:center;
+ background-color:#aaa;
+ justify-content:center;
+}
+.cards.cards-front {
+ background-color:transparent;
+ border:1px solid transparent;
+}
+.card {
+ display:grid;
+ background-color:white;
+ //border:5px solid green;
+ justify-items:center;
+ align-items:center;
+}
+.card-front {
+ display:flex;
+ flex-direction:column;
+ justify-content:space-between;
+ /* ExplanationNote: enough to fit two lines of french,
+ * two lines of english
+ * and two lines of chinese (with a bigger font to manually write over it).
+ */
+ padding-top:3mm;
+ padding-bottom:3mm;
+ padding-left:1mm;
+ padding-right:1mm;
+}
+.card-front-french-english-mandarin {
+ display:grid;
+ grid-template-rows:2cm 2cm 4.2cm;
+ align-items:start;
+ justify-items:center;
+}
+.card-front > .separator {
+ border-top:1px solid #999;
+ width:100%;
+}
+.card-matter {
+ display:flex;
+ flex-direction:row;
+ flex-wrap:wrap;
+ justify-content:center;
+ align-content:space-around;
+ column-gap:0.5cm;
+}
+.card-description {
+ color:#999;
+ font-family:monospace;
+}
+.card-picture {
+ display:flex;
+ flex-direction:column;
+ flex-wrap:nowrap;
+ justify-content:flex-start;
+ width:100%;
+ height:100%;
+ overflow:hidden;
+}
+.card-picture img {
+ display:block;
+ border:0;
+ width:100%;
+ height:100%;
+ object-fit:contain;
+ object-position:center center;
+ overflow:hidden;
+}
+.part {
+ display:flex;
+ flex-direction:row;
+ flex-wrap:nowrap;
+ margin:0 0 0 0;
+ border:5px solid red;
+}
+.word {
+ font-family:monospace;
+ font-variant:small-caps;
+ font-size:1.5cm;
+ line-height:1.0;
+}
+.word .word-field {
+ display:flex;
+ flex-direction:row;
+ justify-content:center;
+}
+.word .word-parts {
+}
+.word .word-parts .word-part {
+}
+.word .word-part.part-odd.word-part-2 {
+ background:linear-gradient(to right,blue,green);
+ background-clip:text;
+ color:transparent;
+}
+.word .word-part.part-even.word-part-2 {
+ background:linear-gradient(to right,green,blue);
+ background-clip:text;
+ color:transparent;
+}
+
+.word .part-even {
+ color:blue;
+}
+.word .part-odd {
+ color:green;
+}
+.word .word-ipas {
+ color:#999;
+ font-size:0.5cm;
+ font-family:Arial;
+ font-variant:normal;
+}
+.word .word-ipas .word-ipa {
+}
+.word .word-pinyins {
+ color:#999;
+ font-size:0.5cm;
+ font-family:Arial;
+ font-variant:normal;
+}
+.word .word-pinyins .word-pinyin {
+}
--- /dev/null
+.rosetta-writing {
+ /* ExplanationNote: even when printing with the option "Shrink to Print Area"
+ * pixels too close to the border can get cropped.
+ */
+ padding:2mm;
+ display:grid;
+ column-gap:5mm;
+ row-gap:1mm;
+ justify-content:space-evenly;
+ align-items:flex-start;
+ align-content:space-around;
+}
+.rosetta-writing-part {
+ /* ExplanationNote: by default, a grid item cannot be smaller than the size of its content.
+ * Change that.
+ */
+ min-height:0;
+ min-width:0;
+ overflow:hidden;
+}
+.rosetta-writing-part-picture {
+ display:flex;
+ flex-direction:column;
+ flex-wrap:nowrap;
+ justify-content:flex-start;
+ width:100%;
+ height:100%;
+}
+.rosetta-writing-part-picture img {
+ display:block;
+ border:0;
+ width:100%;
+ height:100%;
+ object-fit:contain;
+ object-position:right center;
+ overflow:hidden;
+}
+.rosetta-writing-part-picture.with-description img {
+ border-top-left-radius:3mm;
+ border-top-right-radius:3mm;
+}
+.rosetta-writing-part-picture .description {
+ padding-left:0.2cm;
+ padding-right:0.2cm;
+ font-family:monospace;
+ font-variant:small-caps;
+ font-size:14pt;
+ background-color:#ddd;
+ border-top:0 !important;
+ border:1px solid #ddd;
+ border-bottom-left-radius:3mm;
+ border-bottom-right-radius:3mm;
+ overflow:hidden;
+ text-align:center;
+}
+
+
+.rosetta-writing-part.sentence {
+ height:100%;
+}
+.sentence {
+ margin-top:0;
+ margin-bottom:0;
+ margin-left:0;
+ margin-right:0;
+ display:flex;
+ flex-direction:row;
+ flex-wrap:wrap;
+ justify-content:flex-start;
+ align-items:flex-end;
+ align-content:flex-start;
+ row-gap:1mm;
+ column-gap:0.5cm;
+}
+.sentence-word {
+ //gap:1px;
+ //background-color:#aaa;
+ //border:1px solid #aaa;
+ /*
+ border-top-left-radius:3mm;
+ border-top-right-radius:3mm;
+ */
+}
+
+.sentence-cell.input.script-UnicodeBlockCJK-UnicodeBlockCJK-Unified-Ideographs {
+ font-size:20mm;
+ height:25mm;
+ width:25mm;
+ line-height:0;
+}
+.lang-LangueMandarin .sentence-cell.model.script-UnicodeBlockCJK-UnicodeBlockCJK-Unified-Ideographs {
+ display:none;
+}
--- /dev/null
+body {
+ line-height:1.4;
+ margin-top:0;
+ margin-left:0;
+ margin-right:0;
+ //width:650px;
+ width:100%;
+ display: grid;
+ grid-template-columns: 1 / -1;
+ justify-items: center;
+ justify-content:center;
+}
+.worksheet {
+}
+.row {
+ display: grid;
+ //grid-template-columns: repeat(1000, 1.5em);
+}
+.worksheet > div:nth-child(2n) {
+ margin-bottom:.5em;
+}
+.cell {
+ display: grid;
+ place-content: center;
+ position: relative;
+ box-shadow:0 0 0 1px #AAA;
+ background-color:white;
+ min-height:1cm;
+ font-size: 20pt;
+ padding-left:0;
+ padding-right:0;
+ margin-left:0;
+ margin-right:0;
+}
+.cell-space {
+ box-shadow:0 0 0 0 red !important;
+ border-left:1px solid #AAA;
+}
+
+
+.words {
+ white-space:preserve-spaces;
+ //width:100%;
+ margin-left: 10px;
+ margin-right: 10px;
+ margin-bottom: 1ex;
+ margin-top: 1ex;
+ font-family: monospace;
+ font-variant: small-caps;
+ display: grid;
+ gap: 0px;
+ //justify-items: center;
+ justify-self: center;
+ //background-color:grey;
+ place-content: center;
+}
+.words-row {
+ display: grid;
+ break-inside:avoid;
+ grid-template-columns: 6cm 11cm;
+}
+.words-cell {
+ display: grid;
+ vertical-align:center;
+ position: relative;
+ box-shadow:0 0 0 3px #AAA;
+ background-color:white;
+ min-height:1.5em;
+ margin-left:0;
+ margin-right:0;
+}
+
+
+.words-cell .worksheets {
+ margin-top:1ex;
+ margin-bottom:1ex;
+ margin-left:1ex;
+ margin-right:1ex;
+ display:flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content:space-evenly;
+ align-items:flex-start;
+ align-content:space-around;
+}
+.words-cell .worksheets .worksheet:last-child {
+ margin-bottom:0;
+ margin-right:0;
+}
+.words-cell .worksheets .worksheet {
+ align-self:flex-start;
+ white-space:preserve-spaces;
+ //width:auto;
+ margin-left: 0;
+ margin-right: 0.5cm;
+ margin-bottom: 1ex;
+ margin-top: 0;
+ font-family: monospace;
+ font-variant: small-caps;
+ display: grid;
+ gap: 0px;
+ //justify-items: center;
+ justify-self: center;
+ //background-color:grey;
+}
+
+.words-cell .worksheets .worksheet > div:nth-child(2n) {
+ margin-bottom:0;
+}
+.words-cell-picture {
+ width: fit-content;
+ place-content:center;
+ //block-size:fit-content;
+ //box-sizing: fit-content;
+ //width:auto;
+ //max-height:100%;
+ //background-color:white;
+}
+.words-cell-picture img {
+ border:0;
+ place-content:center;
+ vertical-align:center;
+ width: 100%;
+ object-fit: contain;
+ object-position: center center;
+}
+.words-cell-french {
+}
+.words-cell-english {
+}
+.words-cell-mandarin {
+}
+.words-cell-mandarin .cell {
+ font-size:30pt;
+}
+.words-cell-mandarin .row-input .cell {
+ color:#ddd;
+}
+.words-cell-mandarin .row-sound .cell {
+ color:black;
+ font-size:14pt;
+ font-variant:normal;
+}
+.words-cell-pinyin {
+}
+
+@media all {
+ @page {
+ size: 210mm 297mm;
+ margin-top: 1cm;
+ margin-bottom: 1cm;
+ margin-left: 2cm;
+ margin-right: 2cm;
+ }
+}
+}
"type": "github"
}
},
+ "ipa-hs": {
+ "flake": false,
+ "locked": {
+ "narHash": "sha256-APX4D8aycIpfA1kMCi+tgV+VxgA2tX5LMBNCvJz+I2k=",
+ "type": "file",
+ "url": "file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs"
+ },
+ "original": {
+ "type": "file",
+ "url": "file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs"
+ }
+ },
"nixpkgs": {
"locked": {
"lastModified": 1734323986,
"root": {
"inputs": {
"git-hooks": "git-hooks",
- "nixpkgs": "nixpkgs"
+ "ipa-hs": "ipa-hs",
+ "nixpkgs": "nixpkgs",
+ "symantic-base": "symantic-base"
+ }
+ },
+ "symantic-base": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1716595036,
+ "narHash": "sha256-N94VfCqTBUrk4o6d/gsuuE3FZFnXL3bcFFnlani6jSE=",
+ "ref": "refs/heads/main",
+ "rev": "8e1febb72b37887727ba0c011e9bebeca9375a35",
+ "revCount": 116,
+ "type": "git",
+ "url": "git://git.sourcephile.fr/haskell/symantic-base.git"
+ },
+ "original": {
+ "type": "git",
+ "url": "git://git.sourcephile.fr/haskell/symantic-base.git"
}
}
},
{
description = "Worksheet";
inputs = {
- nixpkgs.url = "flake:nixpkgs";
+ nixpkgs.url = "github:NixOS/nixpkgs/9cb344e96d5b6918e94e1bca2d9f3ea1e9615545";
git-hooks.url = "github:cachix/git-hooks.nix";
git-hooks.inputs.nixpkgs.follows = "nixpkgs";
+ symantic-base = { url = "git://git.sourcephile.fr/haskell/symantic-base.git"; flake = false; };
+ ipa-hs = { url = "git+file:///home/julm/work/sourcephile/haskell/worksheets/libs/ipa-hs"; flake = false; };
};
outputs =
inputs:
#./Readme.md
./LICENSES
(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./src)
- (fileFilter (file: lib.any file.hasExt [ "css" ]) ./style)
+ (fileFilter (file: lib.any file.hasExt [ "css" ]) ./data/styles)
(fileFilter (file: lib.any file.hasExt [ "hs" "html" "txt" ]) ./tests)
#(fileFilter (file: lib.any file.hasExt [ "hs" ]) ./app)
];
pkgs = inputs.nixpkgs.legacyPackages.${system};
haskellPackages = pkgs.haskellPackages.extend (with pkgs.haskell.lib; finalHaskellPkgs: previousHaskellPkgs: {
${pkg} = buildFromSdist (finalHaskellPkgs.callCabal2nix pkg fileInputs { });
+ anki-tools = null;
+ symantic-base = finalHaskellPkgs.callCabal2nix "symantic-base" inputs.symantic-base { };
+ #ipa = doJailbreak (unmarkBroken previousHaskellPkgs.ipa);
+ ipa = doJailbreak (finalHaskellPkgs.callCabal2nix "ipa-hs" inputs.ipa-hs { });
+ python-pickle = dontCheck (doJailbreak (unmarkBroken previousHaskellPkgs.python-pickle));
});
}
);
in
{
# `nix -L build`
- packages = perSystem ({ haskellPackages, ... }: {
+ packages = perSystem ({ haskellPackages, pkgs, ... }: pkgs // {
default = haskellPackages.${pkg};
});
# `nix -L develop` or `direnv allow`
haskellPackages.hlint
#pkgs.git-chglog
pkgs.reuse
+ pkgs.xdot
+ pkgs.zgrviewer
+ pkgs.gephi
];
withHoogle = false;
inherit (inputs.self.checks.${system}.git-hooks-check) shellHook;
record-brace-space: false
respectful: true
single-constraint-parens: never
+fixities:
+ - "infixr 0 :="
+ - "infixr 0 $"
+++ /dev/null
-{-# LANGUAGE PackageImports #-}
-
-module Prelude (
- -- module BasePrelude
- -- module Prelude,
- Bounded (..),
- Double,
- Enum,
- Fractional (..),
- Integral (..),
- Num (..),
- Rational,
- Real,
- error,
- FilePath,
- fromIntegral,
- IsString (..),
- String,
- toRational,
- IO,
- Char,
- Monad (..),
- forM,
- forM_,
- (++),
- (>>>),
- module Data.Bool,
- module Data.Eq,
- module Data.Function,
- module Data.Functor,
- module Data.Ord,
- module Data.Semigroup,
-)
-where
-
-import Control.Arrow
-import Control.Monad
-import Data.Bool
-import Data.Eq
-import Data.Function
-import Data.Functor
-import Data.Ord
-import Data.Semigroup
-import Data.String
-import "base" Prelude as BasePrelude
--- /dev/null
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TemplateHaskell #-}
+
+module Wiktionary where
+
+import Data.Aeson.TH
+import Data.List qualified as List
+import Data.Text qualified as Text
+import Worksheets.Utils.IPA (IPAPhons)
+import Worksheets.Utils.JSON qualified as JSON
+import Worksheets.Utils.Prelude
+import Worksheets.Utils.SQL qualified as SQL
+import Prelude (quot)
+
+data Abbreviation = Abbreviation
+ { abbreviation_raw_tags :: Maybe JSON.Value
+ , abbreviation_roman :: Maybe ShortText
+ , abbreviation_sense :: Maybe JSON.Value
+ , abbreviation_sense_index :: Maybe JSON.Value
+ , abbreviation_tags :: Maybe JSON.Value
+ , abbreviation_topics :: Maybe JSON.Value
+ , abbreviation_translation :: Maybe JSON.Value
+ , abbreviation_word :: Maybe ShortText
+ }
+ deriving (Eq, Show)
+$(deriveJSON JSON.options ''Abbreviation)
+
+data Anagram = Anagram
+ { anagram_word :: Maybe ShortText
+ }
+ deriving (Eq, Show)
+$(deriveJSON JSON.options ''Anagram)
+
+data Form = Form
+ { form_form :: Maybe ShortText
+ , form_ipas :: Maybe [IPAPhons]
+ , form_raw_tags :: Maybe JSON.Value
+ , form_sense :: Maybe JSON.Value
+ , form_sense_index :: Maybe JSON.Value
+ , form_source :: Maybe ShortText
+ , form_tags :: Maybe [ShortText]
+ , form_hiragana :: Maybe ShortText
+ , form_roman :: Maybe ShortText
+ }
+ deriving (Eq, Show)
+$(deriveJSON JSON.options ''Form)
+
+data Sense = Sense
+ { sense_alt_of :: Maybe JSON.Value
+ , sense_categories :: Maybe [ShortText]
+ , sense_examples :: Maybe JSON.Value
+ , sense_form_of :: Maybe JSON.Value
+ , sense_glosses :: Maybe [ShortText]
+ , sense_note :: Maybe JSON.Value
+ , sense_raw_tags :: Maybe JSON.Value
+ , sense_tags :: Maybe JSON.Value
+ , sense_topics :: Maybe JSON.Value
+ }
+ deriving (Eq, Show)
+$(deriveJSON JSON.options ''Sense)
+
+data Sound = Sound
+ { sound_audio :: Maybe ShortText
+ , sound_enpr :: Maybe IPAPhons
+ , sound_flac_url :: Maybe ShortText
+ , sound_homophone :: Maybe JSON.Value
+ , sound_ipa :: Maybe IPAPhons
+ , sound_mp3_url :: Maybe ShortText
+ , sound_note :: Maybe JSON.Value
+ , sound_oga_url :: Maybe ShortText
+ , sound_ogg_url :: Maybe ShortText
+ , sound_opus_url :: Maybe ShortText
+ , sound_raw_tags :: Maybe [ShortText]
+ , sound_rhymes :: Maybe JSON.Value
+ , sound_roman :: Maybe JSON.Value
+ , sound_other :: Maybe JSON.Value
+ , sound_text :: Maybe JSON.Value
+ , sound_tags :: Maybe JSON.Value
+ , sound_topics :: Maybe JSON.Value
+ , sound_wav_url :: Maybe ShortText
+ , sound_zh_pron :: Maybe JSON.Value -- zh-pron
+ }
+ deriving (Eq, Show)
+$(deriveJSON JSON.options ''Sound)
+
+data Synonym = Synonym
+ { synonym_alt :: Maybe JSON.Value
+ , synonym_raw_tags :: Maybe JSON.Value
+ , synonym_roman :: Maybe JSON.Value
+ , synonym_sense :: Maybe JSON.Value
+ , synonym_sense_index :: Maybe JSON.Value
+ , synonym_tags :: Maybe JSON.Value -- [ShortText]
+ , synonym_topics :: Maybe JSON.Value
+ , synonym_translation :: Maybe JSON.Value
+ , synonym_word :: Maybe ShortText
+ }
+ deriving (Eq, Show)
+$(deriveJSON JSON.options ''Synonym)
+
+-- | Tries to follow the schema at:
+-- https://kaikki.org/dictionary/errors/mapping/index.html
+data Wiktionary = Wiktionary
+ { wiktionary_id :: Int -- PRIMARY KEY
+ , wiktionary_word :: Maybe ShortText
+ , wiktionary_lang_code :: Maybe ShortText
+ , wiktionary_lang :: Maybe ShortText
+ , wiktionary_pos :: Maybe ShortText
+ , wiktionary_pos_title :: Maybe ShortText
+ , wiktionary_etymology_texts :: Maybe [ShortText]
+ , wiktionary_senses :: Maybe [Sense]
+ , wiktionary_forms :: Maybe [Form]
+ , wiktionary_sounds :: Maybe [Sound]
+ , wiktionary_translations :: Maybe JSON.Value
+ , wiktionary_synonyms :: Maybe [Synonym]
+ , wiktionary_derived :: Maybe JSON.Value
+ , wiktionary_related :: Maybe JSON.Value
+ , wiktionary_anagrams :: Maybe [Anagram]
+ , wiktionary_categories :: Maybe [ShortText]
+ , wiktionary_tags :: Maybe [ShortText]
+ , wiktionary_raw_tags :: Maybe JSON.Value
+ , wiktionary_meronyms :: Maybe JSON.Value
+ , wiktionary_hyponyms :: Maybe JSON.Value
+ , wiktionary_hypernyms :: Maybe JSON.Value
+ , wiktionary_notes :: Maybe JSON.Value
+ , wiktionary_proverbs :: Maybe JSON.Value
+ , wiktionary_paronyms :: Maybe JSON.Value
+ , wiktionary_antonyms :: Maybe JSON.Value
+ , wiktionary_abbreviation :: Maybe [Abbreviation]
+ , wiktionary_holonyms :: Maybe JSON.Value
+ , wiktionary_etymology_examples :: Maybe JSON.Value
+ , wiktionary_title :: Maybe ShortText
+ , wiktionary_redirect :: Maybe ShortText
+ , wiktionary_troponyms :: Maybe JSON.Value
+ -- ^ Yes, the word can be missing,
+ -- eg. when `wiktionary_pos` is `"hard-redirect"`.
+ }
+ deriving (Eq, Show, Generic)
+
+$(deriveJSON JSON.options ''Wiktionary)
+
+instance SQL.ToRow Wiktionary where
+ toRow Wiktionary{..} =
+ [ SQL.toField wiktionary_id
+ , SQL.toField wiktionary_word
+ , SQL.toField wiktionary_lang_code
+ , SQL.toField wiktionary_lang
+ , SQL.toField wiktionary_pos
+ , SQL.toField wiktionary_pos_title
+ , SQL.toField wiktionary_etymology_texts
+ , SQL.toField wiktionary_senses
+ , SQL.toField wiktionary_forms
+ , SQL.toField wiktionary_sounds
+ , SQL.toField wiktionary_translations
+ , SQL.toField wiktionary_synonyms
+ , SQL.toField wiktionary_derived
+ , SQL.toField wiktionary_related
+ , SQL.toField wiktionary_anagrams
+ , SQL.toField wiktionary_categories
+ , SQL.toField wiktionary_tags
+ , SQL.toField wiktionary_raw_tags
+ , SQL.toField wiktionary_meronyms
+ , SQL.toField wiktionary_hyponyms
+ , SQL.toField wiktionary_hypernyms
+ , SQL.toField wiktionary_notes
+ , SQL.toField wiktionary_proverbs
+ , SQL.toField wiktionary_paronyms
+ , SQL.toField wiktionary_antonyms
+ , SQL.toField wiktionary_abbreviation
+ , SQL.toField wiktionary_holonyms
+ , SQL.toField wiktionary_etymology_examples
+ , SQL.toField wiktionary_title
+ , SQL.toField wiktionary_redirect
+ , SQL.toField wiktionary_troponyms
+ ]
+instance SQL.FromRow Wiktionary where
+ fromRow =
+ Wiktionary
+ <$> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+ <*> SQL.fromFieldWithErrorContext
+type LangCode = ShortText
+
+ngramsOfLength :: Int -> Text -> [Text]
+ngramsOfLength n txt | Text.length txt < n = []
+ngramsOfLength n txt =
+ [ go q t
+ | (start, t) <- txt & Text.tails & List.take (n) & List.zip [0 :: Int ..]
+ , let q = quot (len - start) n
+ ]
+ & mconcat
+ where
+ len = Text.length txt
+ go q t = case Text.splitAt n t of
+ (a, b)
+ | q <= 0 -> []
+ | otherwise -> a : go (q - 1) b
+
+ngramsWithinLengths :: Int -> Int -> Text -> [Text]
+ngramsWithinLengths low high t =
+ [ ngramsOfLength n t
+ | n <- [low .. high]
+ ]
+ & mconcat
+++ /dev/null
-module Worksheets.Writing.Latin where
-
-import Data.ByteString.Builder (Builder)
-import Data.Text qualified as Text
-import Data.Text.IO.Utf8 qualified as Text
-import Paths_worksheets qualified as Self
-import System.FilePath.Posix qualified as File
-import Text.Blaze
-import Text.Blaze.Html5 qualified as H
-import Text.Blaze.Html5.Attributes qualified as HA
-import Text.Blaze.Renderer.Utf8 qualified as Blaze
-import Prelude
-
--- import Debug.Pretty.Simple (pTraceShowM)
-
-worksheet :: File.FilePath -> IO Builder
-worksheet inputFilePath = do
- inputText <- Text.readFile inputFilePath
- let inputLines = Text.lines inputText
- -- FIXME: this absolute path is not reproducible out of my system
- cssPath <- Self.getDataFileName "worksheet.css" <&> File.normalise
- return $ Blaze.renderMarkupBuilder do
- H.docTypeHtml do
- H.head do
- H.title $ fromString $ File.takeBaseName inputFilePath
- H.link
- ! HA.rel "stylesheet"
- ! HA.type_ "text/css"
- ! HA.href (toValue cssPath)
- H.body do
- "\n"
- H.div ! HA.class_ "worksheet" $ do
- forM_ inputLines \inputLine -> do
- H.div ! HA.class_ "row" $ do
- forM_ (Text.unpack inputLine) \inputChar -> do
- let cellSpace
- | inputChar == ' ' = " cell-space"
- | otherwise = ""
- H.div ! HA.class_ ("cell" <> cellSpace) $ do
- fromString [inputChar]
- "\n"
- H.div ! HA.class_ "row" $ do
- forM_ (Text.unpack inputLine) \inputChar -> do
- let cellSpace
- | inputChar == ' ' = " cell-space"
- | otherwise = ""
- H.div ! HA.class_ ("cell" <> cellSpace) $ do
- fromString " "
- "\n"
+++ /dev/null
-body {
- line-height:1.4;
- margin:2ex auto;
- //width:650px;
-}
-.worksheet {
- white-space:preserve-spaces;
- width:100%;
- margin-left: 1ex;
- margin-right: 1ex;
- margin-bottom: 1ex;
- margin-top: 1ex;
- font-family: sans;
- font-variant: small-caps;
- display: grid;
- gap: 0px;
- //justify-items: center;
- justify-self: center;
- font-size: 14pt;
- //background-color:grey;
-}
-.row {
- display: grid;
- grid-template-columns: repeat(1000, 1.5em);
-}
-.worksheet > div:nth-child(2n) {
- margin-bottom:.5em;
-}
-.cell {
- display: grid;
- place-content: center;
- position: relative;
- box-shadow:0 0 0 1px #AAA;
- background-color:white;
- min-height:1.5em;
- padding-left:0;
- padding-right:0;
- margin-left:0;
- margin-right:0;
-}
-.cell-space {
- box-shadow:0 0 0 0 red !important;
- border-left:1px solid #AAA;
-}
--- /dev/null
+weight key
--- /dev/null
+weight key
--- /dev/null
+0
\ No newline at end of file
--- /dev/null
+fromList []
\ No newline at end of file
--- /dev/null
+fromList []
\ No newline at end of file
--- /dev/null
+fromList
+ [ 1
+ , 2
+ , 3
+ , 4
+ , 5
+ , 6
+ , 7
+ , 8
+ , 9
+ , 10
+ , 11
+ , 12
+ , 13
+ , 14
+ , 15
+ , 16
+ , 18
+ , 21
+ ]
\ No newline at end of file
--- /dev/null
+fromList []
\ No newline at end of file
--- /dev/null
+0
\ No newline at end of file
--- /dev/null
+fromList []
\ No newline at end of file
--- /dev/null
+0
\ No newline at end of file
--- /dev/null
+module Language.ChineseSpec where
+
+import Control.Arrow ((>>>))
+import Control.Monad (Monad (..))
+import Data.Bool
+import Data.ByteString.Builder qualified as Builder
+import Data.Eq (Eq (..))
+import Data.Foldable (null)
+import Data.Function (($), (&), (.))
+import Data.Functor ((<&>))
+import Data.GenValidity.Map ()
+import Data.GenValidity.Sequence ()
+import Data.GenValidity.Set ()
+import Data.GenValidity.Text ()
+import Data.List qualified as List
+import Data.Map.Strict qualified as Map
+import Data.Maybe (isNothing)
+import Data.Monoid (Monoid (..))
+import Data.Ord (Down (..))
+import Data.Set (Set)
+import Data.Set qualified as Set
+import Data.String (String)
+import Data.Text qualified as Text
+import Data.Text.Short qualified as ShortText
+import Data.Validity.Map ()
+import Data.Validity.Set ()
+import Data.Validity.Text ()
+import GHC.Stack (HasCallStack)
+import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
+import Test.Syd
+import Text.Show (Show (..))
+
+import Language.Chinese (ChineseDict (..), ChineseDictEntries (..), unChineseDict)
+import Language.Chinese qualified as Chinese
+import Worksheets.Utils.Prelude
+
+getGoldenPath title = do
+ descrPath <- getTestDescriptionPath
+ let dirPath =
+ List.reverse descrPath
+ <&> Text.unpack
+ . Text.replace
+ (Text.pack ".")
+ (Text.singleton pathSeparator)
+ & joinPath
+ return $ "tests" </> dirPath </> title <.> "golden"
+
+goldenShowWithOuter :: Show a => String -> (outer -> a) -> TestDefM (outer : outers) () ()
+goldenShowWithOuter title run = do
+ outPath <- getGoldenPath title
+ itWithOuter title \outer -> do
+ goldenPrettyShowInstance outPath $
+ run outer
+
+goldenBuilderWithOuter :: String -> (outer -> Builder.Builder) -> TestDefM (outer : outers) () ()
+goldenBuilderWithOuter title run = do
+ outPath <- getGoldenPath title
+ itWithOuter title \outer -> do
+ pureGoldenByteStringBuilderFile outPath $
+ run outer
+
+spec :: HasCallStack => Spec
+spec =
+ aroundAll (\k -> Chinese.readChineseLexicalDatabase >>= k) do
+ goldenShowWithOuter "size" $ unChineseDict >>> Map.size
+ goldenShowWithOuter "keyLengthToSumOfEntries" $ Chinese.keyLengthToSumOfEntries
+ goldenShowWithOuter "keysWithoutStrokes" keysWithoutStrokes
+ goldenShowWithOuter "keysWithoutDecomp" keysWithoutDecomp
+ goldenShowWithOuter "keysWithoutFreq" $ keysWithoutFreq >>> Set.size
+ describe "dictToWeights" do
+ aroundAllWith (\k dict -> k (Chinese.dictToWeights dict)) do
+ goldenShowWithOuter "size" $ Chinese.weightsMap >>> Map.size
+ goldenShowWithOuter "take_10" $ Chinese.weightsMap >>> Map.take 10
+ describe "dictOrder" do
+ aroundAllWith (\k weights -> k ((Chinese.dictOrder weights))) do
+ goldenBuilderWithOuter "all" chineseOrderTsv
+ goldenBuilderWithOuter "take_10" $ Chinese.unChineseOrder >>> Map.take 10 >>> Chinese.ChineseOrder >>> chineseOrderTsv
+
+chineseOrderTsv :: Chinese.ChineseOrder -> Builder.Builder
+chineseOrderTsv (Chinese.ChineseOrder o) =
+ ["weight\tkey\n"]
+ <> [ [ weight & show & Builder.stringUtf8
+ , "\t"
+ , key & ShortText.unpack & Builder.stringUtf8
+ , "\n"
+ ]
+ & mconcat
+ | (Down weight, keyToBC) <- o & Map.toList
+ , key <- keyToBC & Chinese.weightsMap & Map.keys
+ ]
+ & mconcat
+
+keysWithoutStrokes :: ChineseDict -> Set Chinese.DictKey
+keysWithoutStrokes (ChineseDict d) =
+ d
+ & Map.filterWithKey
+ ( \key ChineseDictEntries{chineseStrokes} ->
+ ShortText.length key == 1
+ && isNothing chineseStrokes
+ )
+ & Map.keysSet
+keysWithoutDecomp :: ChineseDict -> Set Chinese.DictKey
+keysWithoutDecomp (ChineseDict d) =
+ d
+ & Map.filterWithKey
+ ( \key ChineseDictEntries{chineseComponents} ->
+ ShortText.length key == 1
+ && null chineseComponents
+ )
+ & Map.keysSet
+keysWithoutFreq :: ChineseDict -> Set Chinese.DictKey
+keysWithoutFreq (ChineseDict d) =
+ d
+ & Map.filterWithKey
+ ( \key ChineseDictEntries{chineseFrequency} ->
+ ShortText.length key == 1
+ && isNothing chineseFrequency
+ )
+ & Map.keysSet
--- /dev/null
+{-# LANGUAGE OverloadedLists #-}
+
+module Language.EnglishSpec where
+
+import Data.ByteString.Builder qualified as ByteString.Builder
+import Data.GenValidity.Map ()
+import Data.GenValidity.Sequence ()
+import Data.GenValidity.Set ()
+import Data.GenValidity.Text ()
+import Data.List qualified as List
+import Data.Map.Strict qualified as Map
+import Data.Set qualified as Set
+import Data.Text qualified as Text
+import Data.Text.Encoding qualified as Text
+import Data.Text.Lazy.Encoding qualified as Text.Lazy
+import Data.Text.Short qualified as ShortText
+import Data.Validity.Map ()
+import Data.Validity.Set ()
+import Data.Validity.Text ()
+import Language
+import Language.English hiding (pronunciationRules)
+import Language.English qualified as English
+import Language.Pronunciation (ExampleLiteral (..), Lexeme (..), Rule (..), RuleLexemes, after, before, begining, ending, meaning, occurence, rule, silent, word)
+import Language.Pronunciation qualified as Pron
+import Paths_worksheets qualified as Self
+import System.Directory qualified as IO
+import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
+import System.FilePath.Posix qualified as File
+import System.IO qualified as IO
+import Test.Syd
+import Text.Blaze.Html5.Attributes qualified as HA
+import Utils.Pronunciation qualified as Pron
+import Utils.Tests
+import Wiktionary qualified
+import Worksheets.Utils.HTML (Html, className, classes, cm, styles, (!))
+import Worksheets.Utils.HTML qualified as HTML
+import Worksheets.Utils.IPA qualified as IPA
+import Worksheets.Utils.Paper qualified as Paper
+import Worksheets.Utils.Prelude
+import Worksheets.Utils.SQL qualified as SQL
+import Prelude (error, even, mod)
+
+spec :: HasCallStack => Spec
+spec = do
+ -- Pron.lexerRender $ English.pronunciationDict
+ describe "pronunciation" do
+ describe "parser" do
+ Pron.pronunciationParserTest pronunciationRules sentences
+
+{-
+mangleSupraSegmentalFeatures :: [IPA.Syllable []] -> [[IPA.Segment]]
+mangleSupraSegmentalFeatures = \case
+ [] -> []
+ IPA.Syllable syl : ts -> syl : mangleSupraSegmentalFeatures ts
+ IPA.WithSuprasegmentalFeature IPA.Linking syl : ts ->
+ case mangleSupraSegmentalFeatures ts of
+ [] -> [dropSupraSegmentalFeatures syl]
+ x : xs -> (dropSupraSegmentalFeatures syl <> x) : xs
+ IPA.WithSuprasegmentalFeature _feat syl : xs ->
+ mangleSupraSegmentalFeatures (syl : xs)
+-}
+
+-- cardsHtml "syllabes" $ English.syllablesTable & English.syllablesTableToHTML
+
+sentences :: Map Pron.InputLexemes Pron.Pronunciation
+sentences =
+ [ pronunciationRules
+ & Pron.examples
+ ]
+ & list
+ & Map.unionsWith (curry errorShow)
+
+-- -- , [LexemeVowel] <> ending "sy" := Rule{rulePron = [[LexemeVowel] <> ending "sy" := "zi"], ruleExamples = []}
+pronunciationRules :: Pron.Table
+pronunciationRules =
+ [ "chrysanthemum" := Rule{rulePron = ["chry" := "kɹɪ", "san" := "ˈsæn", "the" := "θə", "mum" := "məm"], ruleExamples = ["chrysanthemum" := "kɹɪ.ˈsæn.θə.məm"]}
+ , "Andúril" := Rule{rulePron = ["An" := "æn", "dú" := "dy", "ril" := "ɹil"], ruleExamples = ["Andúril" := "æn.dy.ɹil"]}
+ , "Angmar" := Rule{rulePron = ["Ang" := "ˈæng", "mar" := "maɹ"], ruleExamples = ["Angmar" := "ˈæng.maɹ"]}
+ , "Aragorn" := Rule{rulePron = ["A" := "ˈa", "ra" := "ra", "gorn" := "ɡɔrn"], ruleExamples = ["Aragorn" := "ˈa.ra.ɡɔrn"]}
+ , "Arwen" := Rule{rulePron = ["Ar" := "ɑɹ", "wen" := "wɛn"], ruleExamples = ["Arwen" := "ɑɹ.wɛn"]}
+ , "Barad-dûr" := Rule{rulePron = ["Ba" := "ba", "rad" := "ɹad", "-" := [], "dûr" := "dyɹ"], ruleExamples = ["Barad-dûr" := "ba.ɹad.dyɹ"]}
+ , "Boromir" := Rule{rulePron = ["Bo" := "bo", "ro" := "ɹəʊ", "mir" := "miɹ"], ruleExamples = ["Boromir" := "bo.ɹəʊ.miɹ"]}
+ , "Elendil" := Rule{rulePron = ["E" := "ɛ", "len" := "ˈlen", "dil" := "dil"], ruleExamples = ["Elendil" := "ɛ.ˈlen.dil"]}
+ , "Escherichia" := Rule{rulePron = ["E" := "ˌɛ", "sche" := "ʃə", "ri" := "ˈɹɪ", "chia" := "kiə"], ruleExamples = ["Escherichia" := "ˌɛ.ʃə.ˈɹɪ.kiə"]}
+ , "Frodo" := Rule{rulePron = ["Fro" := "ˈfɹɒd", "do" := "dəʊ"], ruleExamples = ["Frodo" := "ˈfɹɒd.dəʊ"]}
+ , "Galadriel" := Rule{rulePron = ["Ga" := "ɡa", "la" := "ˈla", "dri" := "dri", "el" := "ɛl"], ruleExamples = ["Galadriel" := "ɡa.ˈla.dri.ɛl"]}
+ , "Gandalf" := Rule{rulePron = ["gand" := "ˈgænd", "alf" := "ɑlf"], ruleExamples = ["Gandalf" := "ˈgænd.ɑlf"]}
+ , "Gimli" := Rule{rulePron = ["Gim" := "ˈgɪm", "li" := "liː"], ruleExamples = ["Gimli" := "ˈgɪm.liː"]}
+ , "Gollum" := Rule{rulePron = ["Go" := "ˈgɑ", "llum" := "ləm"], ruleExamples = ["Gollum" := "ˈgɑ.ləm"]}
+ , "Gondor" := Rule{rulePron = ["gon" := "ɡɒn", "dor" := "dɔɹ"], ruleExamples = ["Gondor" := "ɡɒn.dɔɹ"]}
+ , "Gwaihir" := Rule{rulePron = ["gwai" := "gwaɪ", "hir" := "hɪɹ"], ruleExamples = ["Gwaihir" := "gwaɪ.hɪɹ"]}
+ , "Isildur" := Rule{rulePron = ["I" := "i", "sil" := "ˈsil", "dur" := "duɹ"], ruleExamples = ["Isildur" := "i.ˈsil.duɹ"]}
+ , "Khazad-dûm" := Rule{rulePron = ["Kha" := "kə", "zad" := "ˈzɑd", "-" := [], "dûm" := "dum"], ruleExamples = ["Khazad-dûm" := "kə.ˈzɑd.dum"]}
+ , "Legolas" := Rule{rulePron = ["Le" := "ˈlɛ", "go" := "ɡɔ", "las" := "las"], ruleExamples = ["Legolas" := "ˈlɛ.ɡɔ.las"]}
+ , "Lindon" := Rule{rulePron = ["Lin" := "ˈlɪn", "don" := "dɒn"], ruleExamples = ["Lindon" := "ˈlɪn.dɒn"]}
+ , "Mordor" := Rule{rulePron = ["Mor" := "ˈmɔɹ", "dor" := "dɔɹ"], ruleExamples = ["Mordor" := "ˈmɔɹ.dɔɹ"]}
+ , "Moria" := Rule{rulePron = ["Mo" := "mɔ", "ria" := "ʁja"], ruleExamples = ["Moria" := "mɔ.ʁja"]}
+ , "Narsil" := Rule{rulePron = ["Nar" := "naɹ", "sil" := "sil"], ruleExamples = ["Narsil" := "naɹ.sil"]}
+ , "Pippin" := Rule{rulePron = ["pi" := "ˈpɪ", "ppin" := "pɪn"], ruleExamples = ["Pippin" := "ˈpɪ.pɪn"]}
+ , "Sam" := Rule{rulePron = ["Sam" := "ˈsæm"], ruleExamples = ["Sam" := "ˈsæm"]}
+ , "Saruman" := Rule{rulePron = ["sa" := "ˈsɑ", "ru" := "ru", "man" := "mɑn"], ruleExamples = ["Saruman" := "ˈsɑ.ru.mɑn"]}
+ , "Sauron" := Rule{rulePron = ["Sau" := "ˈsaʊ", "ron" := "ɹɒn"], ruleExamples = ["Sauron" := "ˈsaʊ.ɹɒn"]}
+ , "Shelob" := Rule{rulePron = ["she" := "ʃiː", "lob" := "lɒb"], ruleExamples = ["Shelob" := "ʃiː.lɒb"]}
+ , "Smaug" := Rule{rulePron = ["Smaug" := "smaʊɡ"], ruleExamples = ["Smaug" := "smaʊɡ"]}
+ , "Thorin" := Rule{rulePron = ["Tho" := "θɔː", "rin" := "ɹɪn"], ruleExamples = ["Thorin" := "θɔː.ɹɪn"]}
+ , "Thranduil" := Rule{rulePron = ["Thran" := "θɹæn", "duil" := "dyil"], ruleExamples = ["Thranduil" := "θɹæn.dyil"]}
+ , "Uruk-hai" := Rule{rulePron = ["U" := "u", "ruk" := "ɹuk", "-" := [], "hai" := "aj"], ruleExamples = ["Uruk-hai" := "u.ɹuk.aj"]}
+ , "Valinor" := Rule{rulePron = ["Va" := "va", "li" := "lɪ", "nor" := "nɔɹ"], ruleExamples = ["Valinor" := "va.lɪ.nɔɹ"]}
+ , "above" := Rule{rulePron = ["a" := "ə", "bove" := "ˈbʌv"], ruleExamples = ["above" := "ə.ˈbʌv"]}
+ , "adventure" := Rule{rulePron = ["ad" := "əd", "ven" := "ˈvɛn", "ture" := "t͡ʃə"], ruleExamples = ["adventure" := "əd.ˈvɛn.t͡ʃə"]}
+ , "against" := Rule{rulePron = ["a" := "ə", "gainst" := "ˈɡɛnst"], ruleExamples = ["against" := "ə.ˈɡɛnst"]}
+ , "alligator" := Rule{rulePron = ["all" := "ˈæl", "i" := "ɪ", "ga" := "geɪ", "tor" := "tə"], ruleExamples = ["alligator" := "ˈæl.ɪ.geɪ.tə"]}
+ , "an" := Rule{rulePron = ["an" := "ˈæn"], ruleExamples = ["an" := "ˈæn"]}
+ , "anchor" := Rule{rulePron = ["an" := "ˈæŋ", "kor" := "kə"], ruleExamples = ["anchor" := "ˈæŋ.kə"]}
+ , "ant" := Rule{rulePron = ["ant" := "ænt"], ruleExamples = ["ant" := "ænt"]}
+ , "ants" := Rule{rulePron = ["ants" := "ænts"], ruleExamples = ["ants" := "ænts"]}
+ , "are" := Rule{rulePron = ["are" := "ɑː"], ruleExamples = ["are" := "ɑː"]}
+ , "around" := Rule{rulePron = ["a" := "ə", "round" := "ˈɹaʊnd"], ruleExamples = ["around" := "ə.ˈɹaʊnd"]}
+ , "assault" := Rule{rulePron = ["a" := "ə", "ssault" := "ˈsɒlt"], ruleExamples = ["assault" := "ə.ˈsɒlt"]}
+ , "assaults" := Rule{rulePron = ["a" := "ə", "ssaults" := "ˈsɒlts"], ruleExamples = ["assaults" := "ə.ˈsɒlts"]}
+ , "at" := Rule{rulePron = ["at" := "æt"], ruleExamples = ["at" := "æt"]}
+ , "axe" := Rule{rulePron = ["axe" := "æks"], ruleExamples = ["axe" := "æks"]}
+ , "back" := Rule{rulePron = ["back" := "bæk"], ruleExamples = ["back" := "bæk"]}
+ , "baggins" := Rule{rulePron = ["ba" := "ˈbæ", "ggins" := "gɪnz"], ruleExamples = ["baggins" := "ˈbæ.gɪnz"]}
+ , "balrog" := Rule{rulePron = ["bal" := "ˈbal", "rog" := "ɹɑg"], ruleExamples = ["balrog" := "ˈbal.ɹɑg"]}
+ , "bat" := Rule{rulePron = ["bat" := "bæt"], ruleExamples = ["bat" := "bæt"]}
+ , "be" := Rule{rulePron = ["be" := "biː"], ruleExamples = ["be" := "biː"]}
+ , "bee" := Rule{rulePron = ["bee" := "ˈbiː"], ruleExamples = ["beeing" := "ˈbiː.ɪŋ"]}
+ , "before" := Rule{rulePron = ["be" := "bɪ", "fore" := "ˈfɔː"], ruleExamples = ["before" := "bɪ.ˈfɔː"]}
+ , "big" := Rule{rulePron = ["big" := "bɪg"], ruleExamples = ["big" := "bɪg"]}
+ , "bilbo" := Rule{rulePron = ["bil" := "ˈbɪl", "bo" := "bəʊ"], ruleExamples = ["bilbo" := "ˈbɪl.bəʊ"]}
+ , "bird" := Rule{rulePron = ["bird" := "bəːd"], ruleExamples = ["blackbird" := "blak.bəːd"]}
+ , "black" := Rule{rulePron = ["black" := "blak"], ruleExamples = ["blackbird" := "blak.bəːd"]}
+ , "blade" := Rule{rulePron = ["blade" := "bleɪd"], ruleExamples = ["blade" := "bleɪd"]}
+ , "bladed" := Rule{rulePron = ["bla" := "ˈbleɪ", "ded" := "dɪd"], ruleExamples = ["bladed" := "ˈbleɪ.dɪd"]}
+ , "blocks" := Rule{rulePron = ["blocks" := "blɒks"], ruleExamples = ["blocks" := "blɒks"]}
+ , "board" := Rule{rulePron = ["board" := "bɔːd"], ruleExamples = ["board" := "bɔːd"]}
+ , "boat" := Rule{rulePron = ["boat" := "bəʊt"], ruleExamples = ["boat" := "bəʊt"]}
+ , "body" := Rule{rulePron = ["bod" := "ˈbɒd", "y" := "i"], ruleExamples = ["body" := "ˈbɒd.i"]}
+ , "both" := Rule{rulePron = ["both" := "bəʊθ"], ruleExamples = ["both" := "bəʊθ"]}
+ , "breath" := Rule{rulePron = ["breath" := "ˈbɹiːð"], ruleExamples = ["breath" := "ˈbɹiːð"]}
+ , "bridge" := Rule{rulePron = ["bridge" := "bɹɪd͡ʒ"], ruleExamples = ["bridge" := "bɹɪd͡ʒ"]}
+ , "bright" := Rule{rulePron = ["bright" := "bɹaɪt"], ruleExamples = ["bright" := "bɹaɪt"]}
+ , "buoy" := Rule{rulePron = ["buoy" := "ˈbɔɪ"], ruleExamples = ["buoy" := "ˈbɔɪ"]}
+ , "busy" := Rule{rulePron = ["bu" := "ˈbɪ", "sy" := "zi"], ruleExamples = ["busy" := "ˈbɪ.zi"]}
+ , "buzzard" := Rule{rulePron = ["buzz" := "ˈbʌz", "ard" := "əɹd"], ruleExamples = ["buzzard" := "ˈbʌz.əɹd"]}
+ , "by" := Rule{rulePron = ["by" := "baɪ"], ruleExamples = ["by" := "baɪ"]}
+ , "calla" := Rule{rulePron = ["ca" := "kæ", "lla" := "lə"], ruleExamples = ["calla" := "kæ.lə"]}
+ , "can" := Rule{rulePron = ["can" := "ˈkæn"], ruleExamples = ["can" := "ˈkæn"]}
+ , "canal" := Rule{rulePron = ["ca" := "kə", "nal" := "ˈnæl"], ruleExamples = ["canal" := "kə.ˈnæl"]}
+ , "canoe" := Rule{rulePron = ["ca" := "kə", "noe" := "ˈnu"], ruleExamples = ["canoeing" := "kə.ˈnu.ɪŋ"]}
+ , "cap" := Rule{rulePron = ["cap" := "kæp"], ruleExamples = ["cap" := "kæp"]}
+ , "car" := Rule{rulePron = ["car" := "kɑː"], ruleExamples = ["car" := "kɑː"]}
+ , "carnation" := Rule{rulePron = ["car" := "kɑː", "na" := "ˈneɪ", "tion" := "ʃən"], ruleExamples = ["carnation" := "kɑː.ˈneɪ.ʃən"]}
+ , "cast" := Rule{rulePron = ["cast" := "kɑːst"], ruleExamples = ["cast" := "kɑːst"]}
+ , "castle" := Rule{rulePron = ["castle" := "kɑːsl̩"], ruleExamples = ["castle" := "kɑːsl̩"]}
+ , "casts" := Rule{rulePron = ["casts" := "kɑːsts"], ruleExamples = ["casts" := "kɑːsts"]}
+ , "cat" := Rule{rulePron = ["cat" := "kæt"], ruleExamples = ["cat" := "kæt"]}
+ , "close" := Rule{rulePron = ["close" := "kləʊz"], ruleExamples = ["close" := "kləʊz"]}
+ , "coli" := Rule{rulePron = ["co" := "ˈkoʊ", "li" := "laɪ"], ruleExamples = ["Escherichia coli" := "ˌɛ.ʃə.ˈɹɪ.kiə.ˈkoʊ.laɪ"]}
+ , "command" := Rule{rulePron = ["co" := "kə", "mmand" := "ˈmɑːnd"], ruleExamples = ["command" := "kə.ˈmɑːnd"]}
+ , "control" := Rule{rulePron = ["con" := "kən", "trol" := "ˈtɹəʊl"], ruleExamples = ["control" := "kən.ˈtɹəʊl"]}
+ , "crane" := Rule{rulePron = ["crane" := "kɹeɪn"], ruleExamples = ["crane" := "kɹeɪn"]}
+ , "crow" := Rule{rulePron = ["crow" := "kɹəʊ"], ruleExamples = ["crow" := "kɹəʊ"]}
+ , "crown" := Rule{rulePron = ["crown" := "kɹaʊn"], ruleExamples = ["crown" := "kɹaʊn"]}
+ , "cub" := Rule{rulePron = ["cub" := "kʌb"], ruleExamples = ["cub" := "kʌb"]}
+ , "cut" := Rule{rulePron = ["cut" := "kʌt"], ruleExamples = ["cut" := "kʌt"]}
+ , "daffodil" := Rule{rulePron = ["da" := "ˈdæ", "ffo" := "fə", "dil" := "ˌdɪl"], ruleExamples = ["daffodil" := "ˈdæ.fə.ˌdɪl"]}
+ , "dagger" := Rule{rulePron = ["da" := "ˈdæ", "gger" := "gə"], ruleExamples = ["dagger" := "ˈdæ.gə"]}
+ , "daisy" := Rule{rulePron = ["dai" := "ˈdeɪ", "sy" := "zi"], ruleExamples = ["daisy" := "ˈdeɪ.zi"]}
+ , "dandelion" := Rule{rulePron = ["dan" := "ˈdæn", "de" := "dɪ", "li" := "ˌlaɪ", "on" := "ən"], ruleExamples = ["dandelion" := "ˈdæn.dɪ.ˌlaɪ.ən"]}
+ , "dark" := Rule{rulePron = ["dark" := "dɑːk"], ruleExamples = ["dark" := "dɑːk"]}
+ , "dead" := Rule{rulePron = ["dead" := "dɛd"], ruleExamples = ["dead" := "dɛd"]}
+ , "death" := Rule{rulePron = ["death" := "dɛθ"], ruleExamples = ["death" := "dɛθ"]}
+ , "deceiver" := Rule{rulePron = ["de" := "dɪ", "cei" := "ˈsiː", "ver" := "və"], ruleExamples = ["deceiver" := "dɪ.ˈsiː.və"]}
+ , "dinghy" := Rule{rulePron = ["dingh" := "ˈdɪŋ", "y" := "i"], ruleExamples = ["dinghy" := "ˈdɪŋ.i"]}
+ , "diving" := Rule{rulePron = ["di" := "ˈdaɪ", "ving" := "vɪŋ"], ruleExamples = ["diving" := "ˈdaɪ.vɪŋ"]}
+ , "doom" := Rule{rulePron = ["doom" := "duːm"], ruleExamples = ["doom" := "duːm"]}
+ , "door" := Rule{rulePron = ["door" := "dɔː"], ruleExamples = ["door" := "dɔː"]}
+ , "doors" := Rule{rulePron = ["doors" := "dɔːz"], ruleExamples = ["doors" := "dɔːz"]}
+ , "double" := Rule{rulePron = ["dou" := "ˈdʌ", "ble" := "bl"], ruleExamples = ["double" := "ˈdʌ.bl"]}
+ , "dove" := Rule{rulePron = ["dove" := "dʌv"], ruleExamples = ["dove" := "dʌv"]}
+ , "dragon" := Rule{rulePron = ["dra" := "ˈdɹæ", "gon" := "ɡən"], ruleExamples = ["dragon" := "ˈdɹæ.ɡən"]}
+ , "drive" := Rule{rulePron = ["drive" := "dɹaɪv"], ruleExamples = ["drive" := "dɹaɪv"]}
+ , "drives" := Rule{rulePron = ["drives" := "dɹaɪvs"], ruleExamples = ["drives" := "dɹaɪvs"]}
+ , "dwarf" := Rule{rulePron = ["dwarf" := "dwɔɹf"], ruleExamples = ["dwarf" := "dwɔɹf"]}
+ , "dwarves" := Rule{rulePron = ["dwarves" := "dwɔːvz"], ruleExamples = ["dwarves" := "dwɔːvz"]}
+ , "eagle" := Rule{rulePron = ["ea" := "ˈiː", "gle" := "gɫ̩"], ruleExamples = ["eagle" := "ˈiː.gɫ̩"]}
+ , "earth" := Rule{rulePron = ["earth" := "ɜːθ"], ruleExamples = ["earth" := "ɜːθ"]}
+ , "eight" := Rule{rulePron = ["eight" := "eɪt"], ruleExamples = ["eight" := "eɪt"]}
+ , "elf" := Rule{rulePron = ["elf" := "ɛlf"], ruleExamples = ["elf" := "ɛlf"]}
+ , "elven" := Rule{rulePron = ["el" := "ˈɛl", "ven" := "vn"], ruleExamples = ["elven" := "ˈɛl.vn"]}
+ , "elves" := Rule{rulePron = ["elves" := "elvz"], ruleExamples = ["elves" := "elvz"]}
+ , "en" := Rule{rulePron = ["en" := "ɛn"], ruleExamples = ["golden" := "gəʊld.ɛn"]}
+ , "exhausted" := Rule{rulePron = ["e" := "ɪ", "x" := ["g", "ˈz"], "haus" := "ɔːs", "ted" := "tɪd"], ruleExamples = ["exhausted" := "ɪg.ˈzɔːs.tɪd"]}
+ , "eye" := Rule{rulePron = ["eye" := "aɪ"], ruleExamples = ["eye" := "aɪ"]}
+ , "face" := Rule{rulePron = ["face" := "feɪs"], ruleExamples = ["face" := "feɪs"]}
+ , "faces" := Rule{rulePron = ["fa" := "ˈfeɪ", "ses" := "ɪz"], ruleExamples = ["faces" := "ˈfeɪ.sɪz"]}
+ , "family" := Rule{rulePron = ["fa" := "ˈfæ", "mi" := "mɪ", "ly" := "li"], ruleExamples = ["family" := "ˈfæ.mɪ.li"]}
+ , "fatally" := Rule{rulePron = ["fa" := "ˈfeɪ", "ta" := "tə", "lly" := "li"], ruleExamples = ["fatally" := "ˈfeɪ.tə.li"]}
+ , "fax" := Rule{rulePron = ["fax" := "fæks"], ruleExamples = ["fax" := "fæks"]}
+ , "fellow" := Rule{rulePron = ["fe" := "ˈfɛ", "llow" := "ləʊ"], ruleExamples = ["fellow" := "ˈfɛ.ləʊ"]}
+ , "fight" := Rule{rulePron = ["fight" := "faɪt"], ruleExamples = ["fight" := "faɪt"]}
+ , "fights" := Rule{rulePron = ["fights" := "faɪts"], ruleExamples = ["fights" := "faɪts"]}
+ , "filled" := Rule{rulePron = ["filled" := "fɪld"], ruleExamples = ["filled" := "fɪld"]}
+ , "finger" := Rule{rulePron = ["fin" := "ˈfɪŋ", "ger" := "gə"], ruleExamples = ["finger" := "ˈfɪŋ.gə"]}
+ , "fire" := Rule{rulePron = ["fi" := "ˈfaɪ", "re" := "ə"], ruleExamples = ["fire" := "ˈfaɪ.ə"]}
+ , "flail" := Rule{rulePron = ["flail" := "fleɪl"], ruleExamples = ["flail" := "fleɪl"]}
+ , "flaming" := Rule{rulePron = ["fla" := "ˈfleɪ", "ming" := "mɪŋ"], ruleExamples = ["flaming" := "ˈfleɪ.mɪŋ"]}
+ , "flies" := Rule{rulePron = ["flies" := "flaɪz"], ruleExamples = ["flies" := "flaɪz"]}
+ , "friends" := Rule{rulePron = ["friends" := "fɹɛndz"], ruleExamples = ["friends" := "fɹɛndz"]}
+ , "frighten" := Rule{rulePron = ["frigh" := "ˈfɹaɪ", "ten" := "tən"], ruleExamples = ["frighten" := "ˈfɹaɪ.tən"]}
+ , "frightened" := Rule{rulePron = ["frigh" := "ˈfɹaɪ", "tened" := "tn̩d"], ruleExamples = ["frightened" := "ˈfɹaɪ.tn̩d"]}
+ , "frightens" := Rule{rulePron = ["frigh" := "ˈfɹaɪ", "tens" := "təns"], ruleExamples = ["frightens" := "ˈfɹaɪ.təns"]}
+ , "gangway" := Rule{rulePron = ["gang" := "ˈgæŋ", "way" := "weɪ"], ruleExamples = ["gangway" := "ˈgæŋ.weɪ"]}
+ , "giant" := Rule{rulePron = ["gi" := "ˈd͡ʒaɪ", "ant" := "ənt"], ruleExamples = ["giant" := "ˈd͡ʒaɪ.ənt"]}
+ , "gifts" := Rule{rulePron = ["gifts" := "gɪfts"], ruleExamples = ["gifts" := "gɪfts"]}
+ , "giraffe" := Rule{rulePron = ["gi" := "dʒɪ", "raffe" := "ˈɹɑːf"], ruleExamples = ["giraffe" := "dʒɪ.ˈɹɑːf"]}
+ , "goggles" := Rule{rulePron = ["go" := "ˈgɑ", "ggles" := "gəlz"], ruleExamples = ["goggles" := "ˈgɑ.gəlz"]}
+ , "gold" := Rule{rulePron = ["gold" := "gəʊld"], ruleExamples = ["gold" := "gəʊld"]}
+ , "grab" := Rule{rulePron = ["grab" := "gɹæb"], ruleExamples = ["grab" := "gɹæb"]}
+ , "grabs" := Rule{rulePron = ["grabs" := "gɹæbs"], ruleExamples = ["grabs" := "gɹæbs"]}
+ , "great" := Rule{rulePron = ["great" := "ˈgɹeɪt"], ruleExamples = ["great" := "ˈgɹeɪt"]}
+ , "grey" := Rule{rulePron = ["grey" := "gɹeɪ"], ruleExamples = ["grey" := "gɹeɪ"]}
+ , "hand" := Rule{rulePron = ["hand" := "hænd"], ruleExamples = ["hand" := "hænd"]}
+ , "hands" := Rule{rulePron = ["hands" := "hænds"], ruleExamples = ["hands" := "hænds"]}
+ , "has" := Rule{rulePron = ["has" := "hæz"], ruleExamples = ["has" := "hæz"]}
+ , "head" := Rule{rulePron = ["head" := "ˈhɛd"], ruleExamples = ["head" := "ˈhɛd"]}
+ , "her" := Rule{rulePron = ["her" := "ˈhɜː"], ruleExamples = ["her" := "ˈhɜː"]} -- stressed
+ , "hippopotamus" := Rule{rulePron = ["hippo" := "ˌhɪpə", "pot" := "ˈpɒt", "a" := "ə", "mus" := "məs"], ruleExamples = ["hippopotamus" := "ˌhɪpə.ˈpɒt.ə.məs"]}
+ , "his" := Rule{rulePron = ["his" := "ˈhɪz"], ruleExamples = ["his" := "ˈhɪz"]}
+ , "hobbit" := Rule{rulePron = ["ho" := "ˈhɒ", "bbit" := "bɪt"], ruleExamples = ["hobbit" := "ˈhɒ.bɪt"]}
+ , "hobbits" := Rule{rulePron = ["ho" := "ˈhɒ", "bbits" := "bɪts"], ruleExamples = ["hobbits" := "ˈhɒ.bɪts"]}
+ , "hold" := Rule{rulePron = ["hold" := "həʊld"], ruleExamples = ["hold" := "həʊld"]}
+ , "holds" := Rule{rulePron = ["holds" := "həʊldz"], ruleExamples = ["holds" := "həʊldz"]}
+ , "honey" := Rule{rulePron = ["ho" := "ˈhʌ", "ney" := "ni"], ruleExamples = ["honey" := "ˈhʌ.ni"]}
+ , "hood" := Rule{rulePron = ["hood" := "hʊd"], ruleExamples = ["hood" := "hʊd"]}
+ , "horse" := Rule{rulePron = ["horse" := "hɔːs"], ruleExamples = ["horse" := "hɔːs"]}
+ , "hyacinth" := Rule{rulePron = ["hy" := "ˈhaɪ", "a" := "ə", "cinth" := "sɪnθ"], ruleExamples = ["hyacinth" := "ˈhaɪ.ə.sɪnθ"]}
+ , "index" := Rule{rulePron = ["in" := "ˈɪn", "dex" := "dɛks"], ruleExamples = ["index" := "ˈɪn.dɛks"]}
+ , "inflatable" := Rule{rulePron = ["in" := "ɪn", "fla" := "ˈfleɪ", "ta" := "tə", "ble" := "bəl"], ruleExamples = ["inflatable" := "ɪn.ˈfleɪ.tə.bəl"]}
+ , "iris" := Rule{rulePron = ["i" := "ˈaɪ", "ris" := "ɹɪs"], ruleExamples = ["iris" := "ˈaɪ.ɹɪs"]}
+ , "is" := Rule{rulePron = ["is" := "ɪz"], ruleExamples = ["is" := "ɪz"]}
+ , "jacket" := Rule{rulePron = ["jack" := "ˈd͡ʒæk", "et" := "ɪt"], ruleExamples = ["jacket" := "ˈd͡ʒæk.ɪt"]}
+ , "jasmine" := Rule{rulePron = ["jas" := "d͡ʒæz", "mine" := "ˈmɪn"], ruleExamples = ["jasmine" := "d͡ʒæz.ˈmɪn"]}
+ , "jet" := Rule{rulePron = ["jet" := "d͡ʒɛt"], ruleExamples = ["jet" := "d͡ʒɛt"]}
+ , "jetty" := Rule{rulePron = ["jett" := "d͡ʒɛt", "y" := "i"], ruleExamples = ["jetty" := "d͡ʒɛt.i"]}
+ , "journey" := Rule{rulePron = ["jour" := "ˈd͡ʒɜː", "ney" := "ni"], ruleExamples = ["journey" := "ˈd͡ʒɜː.ni"]}
+ , "kangaroo" := Rule{rulePron = ["kan" := "ˌkæŋ", "ga" := "gə", "roo" := "ˈɹu"], ruleExamples = ["kangaroo" := "ˌkæŋ.gə.ˈɹu"]}
+ , "kid" := Rule{rulePron = ["kid" := "kɪd"], ruleExamples = ["kid" := "kɪd"]}
+ , "king" := Rule{rulePron = ["king" := "kɪŋ"], ruleExamples = ["king" := "kɪŋ"]}
+ , "kneel" := Rule{rulePron = ["kneel" := "niːl"], ruleExamples = ["kneel" := "niːl"]}
+ , "kneels" := Rule{rulePron = ["kneels" := "niːlz"], ruleExamples = ["kneels" := "niːlz"]}
+ , "knight" := Rule{rulePron = ["knight" := "naɪt"], ruleExamples = ["knight" := "naɪt"]}
+ , "life" := Rule{rulePron = ["life" := "laɪf"], ruleExamples = ["life" := "laɪf"]}
+ , "light" := Rule{rulePron = ["light" := "laɪt"], ruleExamples = ["light" := "laɪt"]}
+ , "lilly" := Rule{rulePron = ["lill" := "ˈlɪl", "y" := "i"], ruleExamples = ["lilly" := "ˈlɪl.i"]}
+ , "lily" := Rule{rulePron = ["lil" := "ˈlɪ", "ly" := "li"], ruleExamples = ["lily" := "ˈlɪ.li"]}
+ , "liner" := Rule{rulePron = ["li" := "ˈlaɪ", "ner" := "nə"], ruleExamples = ["liner" := "ˈlaɪ.nə"]}
+ , "lion" := Rule{rulePron = ["lion" := "ˈlaɪən"], ruleExamples = ["lion" := "ˈlaɪən"]}
+ , "lioness" := Rule{rulePron = ["li" := "ˈlaɪ", "o" := "ə", "ness" := "nɪs"], ruleExamples = ["lioness" := "ˈlaɪ.ə.nɪs"]}
+ , "little" := Rule{rulePron = ["li" := "ˈlɪ", "ttle" := "tl"], ruleExamples = ["little" := "ˈlɪ.tl"]}
+ , "long" := Rule{rulePron = ["long" := "lɔːŋ"], ruleExamples = ["long" := "lɔːŋ"]}
+ , "look" := Rule{rulePron = ["look" := "ˈlʊk"], ruleExamples = ["look" := "ˈlʊk"]}
+ , "looks" := Rule{rulePron = ["looks" := "ˈlʊks"], ruleExamples = ["looks" := "ˈlʊks"]}
+ , "lord" := Rule{rulePron = ["lord" := "lɔːd"], ruleExamples = ["lord" := "lɔːd"]}
+ , "mace" := Rule{rulePron = ["mace" := "meɪs"], ruleExamples = ["mace" := "meɪs"]}
+ , "magic" := Rule{rulePron = ["ma" := "ˈma", "gic" := "d͡ʒɪk"], ruleExamples = ["magic" := "ˈma.d͡ʒɪk"]}
+ , "master" := Rule{rulePron = ["mas" := "ˈmɑːs", "ter" := "tə"], ruleExamples = ["master" := "ˈmɑːs.tə"]}
+ , "men" := Rule{rulePron = ["men" := "mɛn"], ruleExamples = ["men" := "mɛn"]}
+ , "middle" := Rule{rulePron = ["mi" := "ˈmɪ", "ddle" := "dəl"], ruleExamples = ["middle" := "ˈmɪ.dəl"]}
+ , "mines" := Rule{rulePron = ["mines" := "maɪnz"], ruleExamples = ["mines" := "maɪnz"]}
+ , "misty" := Rule{rulePron = ["mis" := "ˈmɪs", "ty" := "ti"], ruleExamples = ["misty" := "ˈmɪs.ti"]}
+ , "monkey" := Rule{rulePron = ["monk" := "ˈmʌŋk", "ey" := "i"], ruleExamples = ["monkey" := "ˈmʌŋk.i"]}
+ , "mount" := Rule{rulePron = ["mount" := "maʊnt"], ruleExamples = ["mount" := "maʊnt"]}
+ , "mountain" := Rule{rulePron = ["moun" := "maʊn", "tain" := "tɪn"], ruleExamples = ["mountain" := "maʊn.tɪn"]}
+ , "nazgûl" := Rule{rulePron = ["naz" := "ˈnæz", "gûl" := "gul"], ruleExamples = ["nazgûl" := "ˈnæz.gul"]}
+ , "nazgûls" := Rule{rulePron = ["naz" := "ˈnæz", "gûls" := "guls"], ruleExamples = ["nazgûls" := "ˈnæz.guls"]}
+ , "necromancer" := Rule{rulePron = ["ne" := "ˈnɛ", "cro" := "kɹəʊ", "man" := "ˌmæn", "cer" := "sə"], ruleExamples = ["necromancer" := "ˈnɛ.kɹəʊ.ˌmæn.sə"]}
+ , "ness" := Rule{rulePron = ["ness" := "nɛs"], ruleExamples = ["ness" := "nɛs"]}
+ , "next" := Rule{rulePron = ["next" := "nɛkst"], ruleExamples = ["next" := "nɛkst"]}
+ , "north" := Rule{rulePron = ["north" := "nɔːθ"], ruleExamples = ["north" := "nɔːθ"]}
+ , "on" := Rule{rulePron = ["on" := "ɒn"], ruleExamples = ["on" := "ɒn"]}
+ , "open" := Rule{rulePron = ["o" := "ˈəʊ", "pen" := "pn"], ruleExamples = ["open" := "ˈəʊ.pn"]}
+ , "orc" := Rule{rulePron = ["orc" := "ɔːk"], ruleExamples = ["orc" := "ɔːk"]}
+ , "orcs" := Rule{rulePron = ["orcs" := "ɔːks"], ruleExamples = ["orcs" := "ɔːks"]}
+ , "out" := Rule{rulePron = ["out" := "aʊt"], ruleExamples = ["out" := "aʊt"]}
+ , "paddle" := Rule{rulePron = ["pa" := "ˈpæ", "ddle" := "dəl"], ruleExamples = ["paddle" := "ˈpæ.dəl"]}
+ , "palantír" := Rule{rulePron = ["pa" := "pa", "lan" := "ˈlan", "tír" := "ˌtiːr"], ruleExamples = ["palantír" := "pa.ˈlan.ˌtiːr"]}
+ , "phial" := Rule{rulePron = ["phial" := "ˈfaɪəl"], ruleExamples = ["phial" := "ˈfaɪəl"]}
+ , "picture" := Rule{rulePron = ["pic" := "ˈpɪk", "ture" := "ʃə"], ruleExamples = ["picture" := "ˈpɪk.ʃə"]}
+ , "pipe" := Rule{rulePron = ["pipe" := "ˈpaɪp"], ruleExamples = ["pipe" := "ˈpaɪp"]}
+ , "pointy" := Rule{rulePron = ["poin" := "pɔɪn", "ty" := "ti"], ruleExamples = ["pointy" := "pɔɪn.ti"]}
+ , "polo" := Rule{rulePron = ["po" := "ˈpəʊ", "lo" := "ləʊ"], ruleExamples = ["polo" := "ˈpəʊ.ləʊ"]}
+ , "pool" := Rule{rulePron = ["pool" := "pul"], ruleExamples = ["pool" := "pul"]}
+ , "power" := Rule{rulePron = ["power" := "ˈpaʊ̯ə̯"], ruleExamples = ["power" := "ˈpaʊ̯ə̯"]}
+ , "powers" := Rule{rulePron = ["powers" := "ˈpaʊəz"], ruleExamples = ["powers" := "ˈpaʊəz"]}
+ , "queen" := Rule{rulePron = ["queen" := "kwiːn"], ruleExamples = ["queen" := "kwiːn"]}
+ , "raft" := Rule{rulePron = ["raft" := "ɹɑːft"], ruleExamples = ["raft" := "ɹɑːft"]}
+ , "ranger" := Rule{rulePron = ["ran" := "ˈɹeɪn", "ger" := "d͡ʒə"], ruleExamples = ["ranger" := "ˈɹeɪn.d͡ʒə"]}
+ , "real" := Rule{rulePron = ["real" := "ˈɹiːəl"], ruleExamples = ["real" := "ˈɹiːəl"]}
+ , "really" := Rule{rulePron = ["rea" := "ˈɹɪə", "lly" := "li"], ruleExamples = ["really" := "ˈɹɪə.li"]}
+ , "realm" := Rule{rulePron = ["realm" := "ɹɛlm"], ruleExamples = ["realm" := "ɹɛlm"]}
+ , "red" := Rule{rulePron = ["red" := "ɹɛd"], ruleExamples = ["red" := "ɹɛd"]}
+ , "rhinoceros" := Rule{rulePron = ["rhi" := "ɹaɪ", "noc" <> [LexemeVowel] := "ˈnɒs", "e" := "ə", "ros" := "ɹəs"], ruleExamples = ["rhinoceros" := "ɹaɪ.ˈnɒs.ə.ɹəs"]}
+ , "riding" := Rule{rulePron = ["ri" := "ˈɹaɪ", "ding" := "dɪŋ"], ruleExamples = ["riding" := "ˈɹaɪ.dɪŋ"]}
+ , "ring" := Rule{rulePron = ["ring" := "ɹɪŋ"], ruleExamples = ["ring" := "ɹɪŋ"]}
+ , "rings" := Rule{rulePron = ["rings" := "ɹɪŋz"], ruleExamples = ["rings" := "ɹɪŋz"]}
+ , "run" := Rule{rulePron = ["run" := "ɹʌn"], ruleExamples = ["run" := "ɹʌn"]}
+ , "runs" := Rule{rulePron = ["runs" := "ɹʌns"], ruleExamples = ["runs" := "ɹʌns"]}
+ , "sailing" := Rule{rulePron = ["sai" := "ˈseɪ", "ling" := "lɪŋ"], ruleExamples = ["sailing" := "ˈseɪ.lɪŋ"]}
+ , "scare" := Rule{rulePron = ["scare" := "skɛə"], ruleExamples = ["scare" := "skɛə"]}
+ , "scares" := Rule{rulePron = ["scares" := "skɛɹz"], ruleExamples = ["scares" := "skɛɹz"]}
+ , "scary" := Rule{rulePron = ["sca" := "ˈskɛə", "ry" := "ɹi"], ruleExamples = ["scary" := "ˈskɛə.ɹi"]}
+ , "scuba" := Rule{rulePron = ["scu" := "ˈskuː", "ba" := "bə"], ruleExamples = ["scuba" := "ˈskuː.bə"]}
+ , "seek" := Rule{rulePron = ["seek" := "siːk"], ruleExamples = ["seek" := "siːk"]}
+ , "shadow" := Rule{rulePron = ["sha" := "ˈʃæ", "dow" := "dəʊ"], ruleExamples = ["shadow" := "ˈʃæ.dəʊ"]}
+ , "ship" := Rule{rulePron = ["ship" := "ʃɪp"], ruleExamples = ["ship" := "ʃɪp"]}
+ , "shoot" := Rule{rulePron = ["shoot" := "ʃuːt"], ruleExamples = ["shoot" := "ʃuːt"]}
+ , "shoots" := Rule{rulePron = ["shoots" := "ʃuːts"], ruleExamples = ["shoots" := "ʃuːts"]}
+ , "short" := Rule{rulePron = ["short" := "ʃɔːt"], ruleExamples = ["short" := "ʃɔːt"]}
+ , "sick" := Rule{rulePron = ["sick" := "sɪk"], ruleExamples = ["sick" := "sɪk"]}
+ , "sit" := Rule{rulePron = ["sit" := "ˈsɪt"], ruleExamples = ["sit" := "ˈsɪt"]}
+ , "skeleton" := Rule{rulePron = ["ske" := "ˈskɛ", "le" := "lɪ", "ton" := "tn"], ruleExamples = ["skeleton" := "ˈskɛ.lɪ.tn"]}
+ , "ski" := Rule{rulePron = ["ski" := "skiː"], ruleExamples = ["ski" := "skiː"]}
+ , "smoke" := Rule{rulePron = ["smoke" := "sməʊk"], ruleExamples = ["smoke" := "sməʊk"]}
+ , "smokes" := Rule{rulePron = ["smokes" := "sməʊks"], ruleExamples = ["smokes" := "sməʊks"]}
+ , "snorkel" := Rule{rulePron = ["snor" := "ˈsnɔː", "kel" := "kəl"], ruleExamples = ["snorkel" := "ˈsnɔː.kəl"]}
+ , "stab" := Rule{rulePron = ["stab" := "stæb"], ruleExamples = ["stab" := "stæb"]}
+ , "stabs" := Rule{rulePron = ["stabs" := "stæbs"], ruleExamples = ["stabs" := "stæbs"]}
+ , "staff" := Rule{rulePron = ["staff" := "stɑːf"], ruleExamples = ["staff" := "stɑːf"]}
+ , "stand" := Rule{rulePron = ["stand" := "stænd"], ruleExamples = ["stand" := "stænd"]}
+ , "get" := Rule{rulePron = ["get" := "gɛt"], ruleExamples = ["get" := "gɛt"]}
+ , "stealthy" := Rule{rulePron = ["steal" := "ˈstɛl", "thy" := "θɪ"], ruleExamples = ["stealthy" := "ˈstɛl.θɪ"]}
+ , "suit" := Rule{rulePron = ["suit" := "suːt"], ruleExamples = ["suit" := "suːt"]}
+ , "swim" := Rule{rulePron = ["swim" := "swɪm"], ruleExamples = ["swim" := "swɪm"]}
+ , "swimmer" := Rule{rulePron = ["swi" := "ˈswɪ", "mmer" := "mə"], ruleExamples = ["swimmer" := "ˈswɪ.mə"]}
+ , "swimming" := Rule{rulePron = ["swi" := "ˈswɪ", "mming" := "mɪŋ"], ruleExamples = ["swimming" := "ˈswɪ.mɪŋ"]}
+ , "sword" := Rule{rulePron = ["sword" := "sɔːd"], ruleExamples = ["sword" := "sɔːd"]}
+ , "teeth" := Rule{rulePron = ["teeth" := "ˈtiːθ"], ruleExamples = ["teeth" := "ˈtiːθ"]}
+ , "terrifying" := Rule{rulePron = ["te" := "ˈtɛ", "rri" := "ɹɪ", "fy" := "faɪ", "ing" := "ɪŋ"], ruleExamples = ["terrifying" := "ˈtɛ.ɹɪ.faɪ.ɪŋ"]}
+ , "tiara" := Rule{rulePron = ["ti" := "ti", "ra" := "ˈɑːɹə"], ruleExamples = ["tiara" := "ti.ˈɑːɹə"]}
+ , "tiger" := Rule{rulePron = ["ti" := "ˈtaɪ", "ger" := "gə"], ruleExamples = ["tiger" := "ˈtaɪ.gə"]}
+ , "tigress" := Rule{rulePron = ["ti" := "ˈtaɪ", "gress" := "gɹɪs"], ruleExamples = ["tigress" := "ˈtaɪ.gɹɪs"]}
+ , "together" := Rule{rulePron = ["to" := "tʊ", "geth" := "ˈgɛð", "er" := "ə"], ruleExamples = ["together" := "tʊ.ˈgɛð.ə"]}
+ , "top" := Rule{rulePron = ["top" := "tɒp"], ruleExamples = ["top" := "tɒp"]}
+ , "touches" := Rule{rulePron = ["tou" := "ˈtʌ", "ches" := "t͡ʃɪz"], ruleExamples = ["touches" := "ˈtʌ.t͡ʃɪz"]}
+ , "track" := Rule{rulePron = ["track" := "tɹæk"], ruleExamples = ["track" := "tɹæk"]}
+ , "trawler" := Rule{rulePron = ["traw" := "ˈtrɔː", "ler" := "lə"], ruleExamples = ["trawler" := "ˈtrɔː.lə"]}
+ , "tree" := Rule{rulePron = ["tree" := "tɹiː"], ruleExamples = ["tree" := "tɹiː"]}
+ , "trees" := Rule{rulePron = ["trees" := "tɹiːs"], ruleExamples = ["trees" := "tɹiːs"]}
+ , "tries" := Rule{rulePron = ["tries" := "tɹaɪz"], ruleExamples = ["tries" := "tɹaɪz"]}
+ , "trunks" := Rule{rulePron = ["trunks" := "tɹʌŋks"], ruleExamples = ["trunks" := "tɹʌŋks"]}
+ , "two" := Rule{rulePron = ["two" := "tu"], ruleExamples = ["two" := "tu"]}
+ , "under" := Rule{rulePron = ["un" := "ˈʌn", "der" := "də"], ruleExamples = ["under" := "ˈʌn.də"]}
+ , "unexpected" := Rule{rulePron = ["un" := "ʌn", "e" := "ɪ", "x" := ["k", "ˈs"], "pec" := "pɛk", "ted" := "tɪd"], ruleExamples = ["unexpected" := "ʌn.ɪk.ˈspɛk.tɪd"]}
+ , "up" := Rule{rulePron = ["up" := "ʌp"], ruleExamples = ["up" := "ʌp"]}
+ , "wait" := Rule{rulePron = ["wait" := "weɪt"], ruleExamples = ["wait" := "weɪt"]}
+ , "waits" := Rule{rulePron = ["waits" := "weɪts"], ruleExamples = ["waits" := "weɪts"]}
+ , "walk" := Rule{rulePron = ["walk" := "wɔːk"], ruleExamples = ["walk" := "wɔːk"]}
+ , "walks" := Rule{rulePron = ["walks" := "wɔːks"], ruleExamples = ["walks" := "wɔːks"]}
+ , "war" := Rule{rulePron = ["war" := "wɔː"], ruleExamples = ["war" := "wɔː"]}
+ , "wars" := Rule{rulePron = ["wars" := "wɔːz"], ruleExamples = ["wars" := "wɔːz"]}
+ , "water" := Rule{rulePron = ["wa" := "ˈwɔː", "ter" := "tə"], ruleExamples = ["water" := "ˈwɔː.tə"]}
+ , "wears" := Rule{rulePron = ["wears" := "wɛəz"], ruleExamples = ["wears" := "wɛəz"]}
+ , "white" := Rule{rulePron = ["white" := "waɪt"], ruleExamples = ["white" := "waɪt"]}
+ , "wield" := Rule{rulePron = ["wield" := "wiːld"], ruleExamples = ["wield" := "wiːld"]}
+ , "wields" := Rule{rulePron = ["wields" := "wiːlds"], ruleExamples = ["wields" := "wiːlds"]}
+ , "witch" := Rule{rulePron = ["witch" := "wɪt͡ʃ"], ruleExamples = ["witch" := "wɪt͡ʃ"]}
+ , "women" := Rule{rulePron = ["wom" := "ˈwɪm", "en" := "ɪn"], ruleExamples = ["women" := "ˈwɪm.ɪn"]}
+ , "wood" := Rule{rulePron = ["wood" := "wʊd"], ruleExamples = ["wood" := "wʊd"]}
+ , "wraith" := Rule{rulePron = ["wraith" := "ɹeɪθ"], ruleExamples = ["wraith" := "ɹeɪθ"]}
+ , "yacht" := Rule{rulePron = ["yacht" := "jɒt"], ruleExamples = ["yacht" := "jɒt"]}
+ , "cherry" := Rule{rulePron = ["che" := "ˈt͡ʃɛ", "rry" := "ɹi"], ruleExamples = ["cherry" := "ˈt͡ʃɛ.ɹi"]}
+ , "blue" := Rule{rulePron = ["blue" := "ˈbluː"], ruleExamples = ["blue" := "ˈbluː"]}
+ , "peach" := Rule{rulePron = ["peach" := "piːt͡ʃ"], ruleExamples = ["peach" := "piːt͡ʃ"]}
+ , "wild" := Rule{rulePron = ["wild" := "waɪld"], ruleExamples = ["wild" := "waɪld"]}
+ , "straw" := Rule{rulePron = ["straw" := "stɹɔː"], ruleExamples = ["straw" := "stɹɔː"]}
+ , "green" := Rule{rulePron = ["green" := "gɹiːn"], ruleExamples = ["green" := "gɹiːn"]}
+ , "syrup" := Rule{rulePron = ["sy" := "sɪ", "rup" := "ɹəp"], ruleExamples = ["syrup" := "sɪ.ɹəp"]}
+ , "berry" := Rule{rulePron = ["be" := "ˈbɛ", "rry" := "ɹi"], ruleExamples = ["blueberry" := "ˈbluː.ˈbɛ.ɹi"]}
+ , "cantaloupe" := Rule{rulePron = ["can" := "ˈkæn", "ta" := "tə", "loupe" := "luːp"], ruleExamples = ["cantaloupe" := "ˈkæn.tə.luːp"]}
+ , "zombie" := Rule{rulePron = ["zom" := "zɒm", "bie" := "bi"], ruleExamples = ["zombie" := "zɒm.bi"]}
+ , "must" := Rule{rulePron = ["must" := "mʌst"], ruleExamples = ["must" := "mʌst"]}
+ , "mustang" := Rule{rulePron = ["mus" := "ˈmʌs", "tang" := "ˌtæŋ"], ruleExamples = ["mustang" := "ˈmʌs.ˌtæŋ"]}
+ , "leans" := Rule{rulePron = ["leans" := "liːnz"], ruleExamples = ["leans" := "liːnz"]}
+ , "apple" := Rule{rulePron = ["a" := "ˈæ", "pple" := "pl"], ruleExamples = ["apple" := "ˈæ.pl"]}
+ , "orange" := Rule{rulePron = ["o" := "ˈɒ", "range" := "ɹɪnd͡ʒ"], ruleExamples = ["orange" := "ˈɒ.ɹɪnd͡ʒ"]}
+ , "banana" := Rule{rulePron = ["ba" := "bə", "na" := "ˈnɑː", "na" := "nə"], ruleExamples = ["banana" := "bə.ˈnɑː.nə"]}
+ , "ananas" := Rule{rulePron = ["a" := "ə", "na" := "ˈneɪ", "nas" := "nəs"], ruleExamples = ["ananas" := "ə.ˈneɪ.nəs"]}
+ , "apricot" := Rule{rulePron = ["a" := "ˈeɪ", "pri" := "pɹɪ", "cot" := "kɒt"], ruleExamples = ["apricot" := "ˈeɪ.pɹɪ.kɒt"]}
+ , "lemon" := Rule{rulePron = ["lem" := "ˈlɛm", "on" := "ən"], ruleExamples = ["lemon" := "ˈlɛm.ən"]}
+ , "sweet" := Rule{rulePron = ["sweet" := "swiːt"], ruleExamples = ["sweet" := "swiːt"]}
+ , "lime" := Rule{rulePron = ["lime" := "laɪm"], ruleExamples = ["lime" := "laɪm"]}
+ , "ginger" := Rule{rulePron = ["gin" := "ˈdʒɪn", "ger" := "dʒə"], ruleExamples = ["ginger" := "ˈdʒɪn.dʒə"]}
+ , "raspberry" := Rule{rulePron = ["ras" := "ˈɹɑːz", "be" := "bə", "rry" := "ɹi"], ruleExamples = ["raspberry" := "ˈɹɑːz.bə.ɹi"]}
+ , "hibiscus" := Rule{rulePron = ["hi" := "hɪ", "bis" := "ˈbɪs", "cus" := "kəs"], ruleExamples = ["hibiscus" := "hɪ.ˈbɪs.kəs"]}
+ , "mandarin" := Rule{rulePron = ["man" := "ˈmæn", "da" := "də", "rin" := "ɹɪn"], ruleExamples = ["mandarin" := "ˈmæn.də.ɹɪn"]}
+ , "party" := Rule{rulePron = ["par" := "ˈpɑː", "ty" := "ti"], ruleExamples = ["party" := "ˈpɑː.ti"]}
+ , "greetings" := Rule{rulePron = ["gree" := "ˈgɹiː", "tings" := "tɪŋz"], ruleExamples = ["greetings" := "ˈgɹiː.tɪŋz"]}
+ , "decorations" := Rule{rulePron = ["de" := "ˌdɛ", "co" := "kə", "ra" := "ˈɹeɪ", "tions" := "ʃənz"], ruleExamples = ["decorations" := "ˌdɛ.kə.ˈɹeɪ.ʃənz"]}
+ , "tart" := Rule{rulePron = ["tart" := "tɑːt"], ruleExamples = ["tart" := "tɑːt"]}
+ , "cake" := Rule{rulePron = ["cake" := "keɪk"], ruleExamples = ["cake" := "keɪk"]}
+ , "fruit" := Rule{rulePron = ["fruit" := "fɹuːt"], ruleExamples = ["fruit" := "fɹuːt"]}
+ , "gift" := Rule{rulePron = ["gift" := "gɪft"], ruleExamples = ["gift" := "gɪft"]}
+ , "juice" := Rule{rulePron = ["juice" := "d͡ʒuːs"], ruleExamples = ["juice" := "d͡ʒuːs"]}
+ , "works" := Rule{rulePron = ["works" := "wɜːks"], ruleExamples = ["fireworks" := "ˈfaɪ.ə.wɜːks"]}
+ , "drink" := Rule{rulePron = ["drink" := "dɹɪŋk"], ruleExamples = ["drink" := "dɹɪŋk"]}
+ , "fizzy" := Rule{rulePron = ["fi" := "ˈfɪ", "zzy" := "zi"], ruleExamples = ["fizzy" := "ˈfɪ.zi"]}
+ , "Éowyn" := Rule{rulePron = ["Eo" := "ˈeɪoʊ", "wyn" := "wɪn"], ruleExamples = ["Éowyn" := "ˈeɪoʊ.wɪn"]}
+ , -- , "her" := Rule{rulePron = ["her" := "ə"], ruleExamples = ["her" := "ə"]} -- unstressed
+ ending "'s" := Rule{rulePron = ["'" := [], ending "s" := "s"], ruleExamples = ["tiger's" := "ˈtaɪ.gə.s"]}
+ , ending "for" := Rule{rulePron = [word "for" := "fɔː"], ruleExamples = ["for" := "fɔː"]}
+ , ending "ing" := Rule{rulePron = [ending "ing" := "ɪŋ"], ruleExamples = ["beeing" := "ˈbiː.ɪŋ"]}
+ , ending "ling" := Rule{rulePron = [ending "ling" := "lɪŋ"], ruleExamples = ["snorkelling" := "ˈsnɔː.kəl.lɪŋ"]}
+ , ending "with" := Rule{rulePron = [ending "with" := "wɪθ"], ruleExamples = ["with" := "wɪθ"]}
+ , ending "with" <> " " <> begining [LexemeSemiVowel] := Rule{rulePron = [ending "with" <> " " <> begining [LexemeSemiVowel] := "wɪð"], ruleExamples = ["with you" := "wɪð.ju"]}
+ , ending "with" <> " " <> begining [LexemeSemiVowel] := Rule{rulePron = [ending "with" <> " " <> begining [LexemeSemiVowel] := "wɪð"], ruleExamples = ["with you" := "wɪð.ju"]}
+ , -- , ending "with" <> " " <> [LexemeVowel] := Rule{rulePron = [ending "with" <> " " <> [LexemeVowel] := "wɪð"], ruleExamples = ["with you" := "wɪð.ju"]}
+ word "a" := Rule{rulePron = [word "a" := "ə"], ruleExamples = ["a" := "ə"]}
+ , word "and" := Rule{rulePron = [word "and" := "ænd"], ruleExamples = ["and" := "ænd"]}
+ , word "end" := Rule{rulePron = ["end" := "ɛnd"], ruleExamples = ["end" := "ɛnd"]}
+ , word "in" := Rule{rulePron = [word "in" := "ɪn"], ruleExamples = ["in" := "ɪn"]}
+ , word "its" := Rule{rulePron = [word "its" := "ɪts"], ruleExamples = ["its" := "ɪts"]}
+ , word "of" := Rule{rulePron = [word "of" := "ɒv"], ruleExamples = ["of" := "ɒv"]}
+ , word "the" := Rule{rulePron = [word "the" := "ðə"], ruleExamples = ["the" := "ðə"]}
+ , word "the" <> " " <> [LexemeBorder, LexemeVowel] := Rule{rulePron = [word "the" <> " " <> [LexemeBorder, LexemeVowel] := "ði"], ruleExamples = ["the eye" := "ði.aɪ"]}
+ , word "the" <> " " <> [LexemeVowel] := Rule{rulePron = [word "the" <> " " <> [LexemeVowel] := "ði"], ruleExamples = ["the end" := "ði.ɛnd"]}
+ , word "to" := Rule{rulePron = [word "to" := "tuː"], ruleExamples = ["to" := "tuː"]}
+ , word "you" := Rule{rulePron = [word "you" := "ju"], ruleExamples = ["you" := "ju"]}
+ -- , "with" := Rule{rulePron = ["with" := ""], ruleExamples = ["with" := ""]}
+ -- , ending "s" := Rule{rulePron = [[LexemeConsonant] <> "s" := "ɪŋ"], ruleExamples = ["beeing" := "ˈbiː.ɪŋ"]}
+ ]
+ -- , "" := Rule{rulePron = ["" := ""], ruleExamples = ["" := ""]}
+ & Pron.withCapital
+ & fromList
--- /dev/null
+{-# LANGUAGE OverloadedLists #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Language.FrenchSpec where
+
+import Data.ByteString.Builder qualified as ByteString.Builder
+import Data.Char qualified as Char
+import Data.GenValidity.Map ()
+import Data.GenValidity.Sequence ()
+import Data.GenValidity.Set ()
+import Data.GenValidity.Text ()
+import Data.List qualified as List
+import Data.Map.Strict qualified as Map
+import Data.Set qualified as Set
+import Data.Text qualified as Text
+import Data.Text.Encoding qualified as Text
+import Data.Text.Lazy.Encoding qualified as Text.Lazy
+import Data.Text.Short qualified as ShortText
+import Data.Validity.Map ()
+import Data.Validity.Set ()
+import Data.Validity.Text ()
+import Language
+import Language.French qualified as French
+import Language.Pronunciation (ExampleLiteral (..), Lexeme (..), Rule (..), RuleLexemes, after, before, begining, ending, meaning, occurence, rule, silent, word)
+import Language.Pronunciation qualified as Pron
+import Paths_worksheets qualified as Self
+import System.Directory qualified as IO
+import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
+import System.FilePath.Posix qualified as File
+import System.IO qualified as IO
+import Test.Syd
+import Text.Blaze.Html5.Attributes qualified as HA
+import Utils.Pronunciation qualified as Pron
+import Utils.Tests
+import Wiktionary qualified
+import Worksheets.Utils.HTML (Html, className, classes, cm, styles, (!))
+import Worksheets.Utils.HTML qualified as HTML
+import Worksheets.Utils.IPA qualified as IPA
+import Worksheets.Utils.Paper qualified as Paper
+import Worksheets.Utils.Prelude
+import Worksheets.Utils.SQL qualified as SQL
+import Prelude (error, even, mod)
+
+{-
+instance IsString Rule where
+ fromString s = rule {ruleLexemes = fromString s}
+ [ ful "de" := single "də" ["de" & occurence]
+ , inf "'" := single "" []
+ , inf "-" := single "" []
+ , inf "," := single "" []
+ , inf "?" := single "" []
+ , inf "!" := single "" []
+ , inf borderLeftText := single "" []
+ , inf borderRightText := single "" []
+
+ , inf "demi" := single "dəmi" ["demi" & occurence]
+ , -- , inf "amb" := single "ɑ̃b" ["amb" & occurence, "ulance"]
+ -- , inf "amp" := single "ɑ̃p" ["amp" & occurence, "oule"]
+ -- , inf "amph" := single "ɑ̃f" ["amph" & occurence, "ithéâtre"]
+ -- , inf "an" := multi
+ -- [ [PronContextBeforeBorder] := LexemePron{lexemePronunciation="ɑ̃", lexemeExample=["pl", "an" & occurence]}
+ -- , [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation="an", lexemeExample=["an" & occurence, "imal"]}
+ -- , [PronContextBeforeAny] := LexemePron{lexemePronunciation="ɑ̃", lexemeExample=["an" & occurence, "tilope"]}
+ -- ]
+ , -- , inf "coin" := single "kwɛ̃" ["coin" & occurence, "cer"]
+
+ , -- , inf "im"
+ -- := multi
+ -- [ [PronContextBeforeBorder] := LexemePron{lexemePronunciation = "", lexemeExample = }
+ -- , [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "im", lexemeExample = ["im" & occurence, "ortel"]}
+ -- , [PronContextBeforeAny] := LexemePron{lexemePronunciation = "ɛ̃", lexemeExample = ["im" & occurence, "primer"]}
+ -- ]
+ , -- , inf "in" := single "ɛ̃" ["merl", "in" & occurence]
+ -- , inf "ina" := single "ina" ["ord", "ina" & occurence, "teur"]
+ -- , inf "ine" := single "in" ["rout", "ine" & occurence]
+ -- , inf "inent" := single "in" ["dess", "inent" & occurence]
+ -- , inf "iner" := single "inɛʁ" ["iner" & occurence, "tie"]
+ -- , inf "inex" := single "inɛgz" ["inex" & occurence, "istant"]
+ -- , inf "inexp" := single "inɛksp" ["inexp" & occurence, "licable"]
+ -- , inf "inima" := single "inima" ["inima" & occurence, "ginable"]
+ -- , inf "inimi" := single "inimi" ["inimi" & occurence, "table"]
+ -- , inf "inimp" := single "inimp" ["inimp" & occurence, "ortant"]
+ -- , inf "ininf" := single "inɛ̃" ["ininf" & occurence, "lammation"]
+ -- , inf "inint" := single "inɛ̃t" ["inint" & occurence, "éressant"]
+ -- , inf "inn" := single "in" ["inn" & occurence, "ocent"]
+ -- , inf "ino" := single "ino" ["ino" & occurence, "dore"]
+ -- , inf "inu" := single "inu" ["inu" & occurence, "tile"]
+ -- , inf "ix" := single "iks" ["phén", "ix" & occurence]
+ -- , inf "gine" := single "ʒin" ["an", "gine" & occurence]
+ -- , inf "era" := single "əʁa" ["s", "era" & occurence]
+ -- , inf "erai" := single "əʁɛ" ["s", "erai" & occurence]
+ , inf "era" :=
+ multi
+ [ [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "əʁ", lexemeExample = ["mer" & occurence, "ingue"]}
+ , [PronContextBeforeAny] := LexemePron{lexemePronunciation = "ɛʁ", lexemeExample = ["mer" & occurence, "le"]}
+ ]
+ , inf "erin" := single "əʁɛ̃" ["m", "erin" & occurence, "gue"]
+ , inf "s" :=
+ multi
+ [ [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "z", lexemeExample = ["ti", "s" & occurence, "ane"]}
+ , [PronContextBeforeAnySemiVowel] := LexemePron{lexemePronunciation = "z", lexemeExample = ["pari", "s" & occurence, "ienne"]}
+ , [PronContextBeforeAny] := LexemePron{lexemePronunciation = "s", lexemeExample = ["s", "a" & occurence]}
+ ]
+ , -- , inf "shirt" := single "ʃœʁt" ["shirt" & occurence]
+ , -- , inf "teau" := single "to" ["teau" & occurence]
+ -- , inf "ti" := single "ti" ["ti" & occurence, "gre"]
+ , pre "ukulele" := single "jukulele" ["ukulele" & occurence]
+ , -- , inf "ui" := single "ɥi" ["ling", "ui" & occurence, "stique"]
+ , pre "abrivent" := single "abʁivɑ̃" ["abrivent" & occurence]
+ , pre "adjuvent" := single "adʒyvɑ̃" ["adjuvent" & occurence]
+ , pre "antivent" := single "ɑ̃tivɑ̃" ["antivent" & occurence]
+ , pre "auvent" := single "ovɑ̃" ["auvent" & occurence]
+ , pre "avent" := single "avɑ̃" ["avent" & occurence]
+ , pre "aï" := single "ai" ["c", "aï" & occurence, "man"]
+ , pre "bavent" := single "bavɑ̃" ["bavent" & occurence]
+ , pre "boutavent" := single "butavɑ̃" ["boutavent" & occurence]
+ , pre "bouvent" := single "buvɑ̃" ["bouvent" & occurence]
+ , pre "bénévent" := single "benevɑ̃" ["bénévent" & occurence]
+ , pre "connivent" := single "konivɑ̃" ["connivenr" & occurence]
+ , pre "contrevent" := single "kɔ̃tʁəvɑ̃" ["contrevent" & occurence]
+ , pre "convent" := single "kɔ̃vɑ̃" ["convent" & occurence]
+ , pre "couvent" := single "kuvɑ̃" ["couvent" & occurence]
+ , pre "couvents" := single "kuvɑ̃" ["couvents" & occurence]
+ , pre "engoulevent" := single "ɑ̃gulvɑ̃" ["engoulevent" & occurence]
+ , pre "fervent" := single "fɛʁvɑ̃" ["fervent" & occurence]
+ , pre "frévent" := single "fʁevɑ̃" ["frévent" & occurence]
+ , pre "heurtevent" := single "œʁtəvɑ̃" ["heurtevent" & occurence]
+ , pre "her" := single "ɛʁ" ["her" & occurence, "be"]
+ , pre "hi" := single "i" ["hi" & occurence, "ver"]
+ , pre "ill" := single "il" ["ill" & occurence, "étrisme"]
+ , pre "jack" := single "dʒak" ["jack" & occurence]
+ , pre "jazz" := single "dʒaz" ["jazz" & occurence]
+ , pre "montsurvent" := single "mɔ̃syʁvɑ̃" ["montsurvent" & occurence]
+ , -- , pre "ni" := single "ni" ["ni" & occurence, "ais"]
+ pre "niai" := single "njɛ" ["niai" & occurence, "s"]
+ , pre "paravent" := single "paʁavɑ̃" ["paravent" & occurence]
+ , pre "sen" :=
+ multi
+ [ [PronContextBeforeAny] := LexemePron{lexemePronunciation = "sɑ̃", lexemeExample = ["sen" & occurence, "t"]}
+ , [PronContextBeforeAnyVowel] := LexemePron{lexemePronunciation = "sen", lexemeExample = ["sen" & occurence, "a"]}
+ -- , inf "a" := LexemePron{lexemePronunciation="sen", lexemeExample=["sen" & occurence, "a"]}
+ -- , inf "e" := LexemePron{lexemePronunciation="sən", lexemeExample=["sen" & occurence, "estre"]}
+ -- , inf "i" := LexemePron{lexemePronunciation="sen", lexemeExample=["sen" & occurence, "ior"]}
+ -- , inf "o" := LexemePron{lexemePronunciation="sen", lexemeExample=["Sen" & occurence, "oueix"]}
+ -- , inf "u" := LexemePron{lexemePronunciation="sen", lexemeExample=[]}
+ ]
+ , pre "souvent" := single "suvɑ̃" ["souvent" & occurence]
+ , pre "taillevent" := single "tɑjvɑ̃" ["taillevent" & occurence]
+ , pre "tournevent" := single "tuʁnəvɑ̃" ["tournevent" & occurence]
+ , pre "vent" := single "vɑ̃" ["vent" & occurence]
+ , pre "virevent" := single "viʁvɑ̃" ["virevent" & occurence]
+ , pre "volvent" := single "vɔlvɑ̃" ["volvent" & occurence]
+ , pre "évent" := single "evɑ̃" ["évent" & occurence]
+ , pre "œ" := single "œ" ["œ" & occurence, "uf"]
+ , pre "fier" := single "fjɛʁ" ["fier" & occurence]
+ , pre "tier" := single "tjɛʁ" ["tier" & occurence]
+
+ ]
+ & list
+ & foldMap (\(ks, v) -> [(k, v) | k <- ks])
+ & mapFromListCheckingDuplicates
+ where
+ single pron exs =
+ Map.singleton PronContextBeforeAny $ LexemePron{lexemePronunciation = pron, lexemeExample = exs}
+ multi l =
+ l
+ & list
+ & foldMap (\(ks, v) -> [(k, v) | k <- ks])
+ & mapFromListCheckingDuplicates
+-}
+
+spec :: HasCallStack => Spec
+spec = do
+ -- Pron.lexerRender $ French.pronunciationDict
+ describe "pronunciation" do
+ -- describe "decomposition" do
+ -- forM_ sentences \sentence ->
+ -- Pron.pronunciationDecompositionTest French.pronunciationDict $ sentence & Text.unpack
+ -- describe "result" do
+ -- forM_ sentences \sentence ->
+ -- Pron.pronunciationResultTest French.pronunciationDict $ sentence & Text.unpack
+ describe "parser" do
+ Pron.pronunciationParserTest pronunciationRules sentences
+
+{-
+withoutRetries do
+ withoutTimeout do
+ around (\k -> SQL.withConnection "data/langs/français/kaikki/wiktionary=fr.lang=fr.sqlite3" k) do
+ outDB <- goldenPath "wiktionary" "sqlite"
+ outDBExists <- IO.doesFileExist outDB & liftIO
+ when (outDBExists) do
+ IO.removeFile outDB & liftIO
+ aroundWith
+ ( \k wiktConn -> do
+ SQL.withConnection outDB \outConn ->
+ k (wiktConn, outConn)
+ )
+ do
+ it "check-against-wiktionary" \(wiktConn, outConn) -> do
+ SQL.execute_ outConn $ "PRAGMA journal_mode = OFF"
+ SQL.execute_ outConn $ "PRAGMA synchronous = OFF"
+ SQL.execute_ outConn $ "CREATE TABLE IF NOT EXISTS results (exprLit TEXT NON NULL, wiktBroad TEXT NON NULL, wiktBroadSegments TEXT NON NULL, synthBroad TEXT NON NULL, synthExplain TEXT NON NULL)"
+ SQL.execute_ outConn $ "CREATE INDEX results__exprLit ON results (exprLit);"
+ SQL.execute_ outConn $ "CREATE INDEX results__wiktBroad ON results (wiktBroad);"
+ SQL.execute_ outConn $ "CREATE INDEX results__synthBroad ON results (synthBroad);"
+ SQL.execute_ outConn $ "CREATE TABLE IF NOT EXISTS errors (exprId INTEGER NON NULL, exprLit TEXT NON NULL, error TEXT NON NULL)"
+ SQL.fold
+ wiktConn
+ "SELECT id,word,sounds FROM wiktionary WHERE lang_code='fr' LIMIT 1000"
+ ()
+ (1 :: Int)
+ \ !i
+ ( exprId :: Int
+ , maybeWord :: Maybe Text
+ , sounds :: [Wiktionary.Sound]
+ ) -> do
+ case maybeWord of
+ Nothing -> return ()
+ Just exprLit ->
+ case exprLit & Pron.run French.pronunciationRules of
+ Left err -> do
+ SQL.execute
+ outConn
+ "INSERT INTO errors (exprId, exprLit, error) VALUES (?,?,?)"
+ ( exprId
+ , exprLit
+ , err & pShowNoColor
+ )
+ Right lexemes -> do
+ let synthExplain = lexemes <&> (\Pron.Pron{pronInput, pronRule} -> Pron.chars pronInput <> " → " <> show (Pron.rulePron pronRule)) & List.intercalate "; "
+ let synthBroad = lexemes & foldMap (Pron.pronRule >>> Pron.rulePron >>> Pron.pronunciationText)
+ forM_ sounds \Wiktionary.Sound{..} -> do
+ -- IO.hPrint IO.stderr (i, ident::Int, maybeWord)
+ case sound_ipa of
+ Just (IPA.IPAPhons exprIPAs) -> do
+ forM_ exprIPAs \case
+ IPA.IPAPhonemic exprBroad -> do
+ when (i `mod` 5000 == 0) do
+ IO.hPrint IO.stderr (i, exprLit, exprBroad)
+ SQL.execute
+ outConn
+ "INSERT INTO results(exprLit, wiktBroad, wiktBroadSegments, synthBroad, synthExplain) VALUES(?,?,?,?,?);"
+ ( exprLit
+ , exprBroad & IPA.ipaWordsToText Nothing
+ , exprBroad & IPA.dropSupraSegmentalFeatures & IPA.ipaWordsToText Nothing
+ , synthBroad
+ , synthExplain
+ ) -- & traceShowId
+ IPA.IPAPhonError (_errMsg, _err) -> return ()
+ _ -> return ()
+ _ -> return ()
+ return (i + 1)
+ return @IO ()
+-}
+
+{-
+mangleSupraSegmentalFeatures :: [IPA.Syllable []] -> [[IPA.Segment]]
+mangleSupraSegmentalFeatures = \case
+ [] -> []
+ IPA.Syllable syl : ts -> syl : mangleSupraSegmentalFeatures ts
+ IPA.WithSuprasegmentalFeature IPA.Linking syl : ts ->
+ case mangleSupraSegmentalFeatures ts of
+ [] -> [dropSupraSegmentalFeatures syl]
+ x : xs -> (dropSupraSegmentalFeatures syl <> x) : xs
+ IPA.WithSuprasegmentalFeature _feat syl : xs ->
+ mangleSupraSegmentalFeatures (syl : xs)
+-}
+
+-- cardsHtml "syllabes" $ French.syllablesTable & French.syllablesTableToHTML
+
+sentences :: Map Pron.InputLexemes Pron.Pronunciation
+sentences =
+ [ -- [ ["aiguille"]
+ -- , ["ail"]
+ -- , ["aimer"]
+ -- , ["ampoules"]
+ -- , ["couvent"{exampleLiteralMeaning = "couver"}]
+ -- , ["couvent"{exampleLiteralMeaning = "monastère"}]
+ -- , ["papillon"]
+ -- ] :: [[]]
+ pronunciationRules
+ & Pron.examples
+ ]
+ & list
+ & Map.unionsWith (curry errorShow)
+pronunciationRules :: Pron.Table
+pronunciationRules =
+ [ "Escherichia" := Rule{rulePron = ["E" := "ɛ", "sche" := "ʃe", "ri" := "ʁi", "chia" := "ʃja"], ruleExamples = ["Escherichia" := "ɛ.ʃe.ʁi.ʃja"]}
+ , "Maël" := Rule{rulePron = ["ma" := "ma", "ël" := "ɛl"], ruleExamples = ["Maël" := "ma.ɛl"]}
+ , "a" := Rule{rulePron = ["a" := "a"], ruleExamples = ["allume" := "a.lym"]}
+ , "au" := Rule{rulePron = ["au" := "o"], ruleExamples = ["au" := "o"]}
+ , "à" := Rule{rulePron = ["à" := "a"], ruleExamples = ["à" := "a"]}
+ , "arc" := Rule{rulePron = ["arc" := "aʁk"], ruleExamples = ["arc" := "aʁk"]}
+ , word "l" := Rule{rulePron = ["l" := "l"], ruleExamples = ["l" := "l"]}
+ , "ancrage" := Rule{rulePron = ["an" := "ɑ̃", "crage" := "kʁaʒ"], ruleExamples = ["ancrage" := "ɑ̃.kʁaʒ"]}
+ , "ancre" := Rule{rulePron = ["ancre" := "ɑ̃kʁ"], ruleExamples = ["ancre" := "ɑ̃kʁ"]}
+ , "ba" := Rule{rulePron = ["ba" := "ba"], ruleExamples = ["bateau" := "ba.to"]}
+ , "bal" := Rule{rulePron = ["bal" := "bal"], ruleExamples = ["bal" := "bal"]}
+ , "balle" := Rule{rulePron = ["balle" := "bal"], ruleExamples = ["balle" := "bal"]}
+ , "bain" := Rule{rulePron = ["bain" := "bɛ̃"], ruleExamples = ["bain" := "bɛ̃"]}
+ , "bile" := Rule{rulePron = ["bile" := "bil"], ruleExamples = ["immobile" := "i.mɔ.bil"]}
+ , "bo" := Rule{rulePron = ["bo" := "bɔ"], ruleExamples = ["bobo" := "bɔ.bo"]}
+ , "boi" := Rule{rulePron = ["boi" := "bwa"], ruleExamples = ["boit" := "bwa"]}
+ , "boué" := Rule{rulePron = ["boué" := "bwe"], ruleExamples = ["boué" := "bwe"]}
+ , "bri" := Rule{rulePron = ["bri" := "bʁi"], ruleExamples = ["sabrina" := "sa.bʁi.na"]}
+ , "brou" := Rule{rulePron = ["brou" := "bʁu"], ruleExamples = ["brouette" := "bʁu.ɛt"]}
+ , "ca" := Rule{rulePron = ["ca" := "ka"], ruleExamples = ["calla" := "ka.la"]}
+ , "cha" := Rule{rulePron = ["cha" := "ʃa"], ruleExamples = ["chamotté" := "ʃa.mɔ.te"]}
+ , "cham" <> [LexemeConsonant] := Rule{rulePron = ["cham" := "ʃɑ̃"], ruleExamples = ["champignon" := "ʃɑ̃.pi.ɲɔ̃"]}
+ , "chon" := Rule{rulePron = ["chon" := "ʃɔ̃"], ruleExamples = ["cochon" := "kɔ.ʃɔ̃"]}
+ , "chry" := Rule{rulePron = ["chry" := "kʁi"], ruleExamples = ["chrysanthème" := "kʁi.zɑ̃.tɛm"]}
+ , "ci" := Rule{rulePron = ["ci" := "si"], ruleExamples = ["mucidule" := "my.si.dyl"]}
+ , "cla" := Rule{rulePron = ["cla" := "kla"], ruleExamples = ["éclat" := "e.kla"]}
+ , "clate" := Rule{rulePron = ["clate" := "klat"], ruleExamples = ["éclate" := "e.klat"]}
+ , "clatent" := Rule{rulePron = ["clatent" := "klat"], ruleExamples = ["éclatent" := "e.klat"]}
+ , "cinthe" := Rule{rulePron = ["cinthe" := "sɛ̃t"], ruleExamples = ["jacinthe" := "ʒa.sɛ̃t"]}
+ , "co" := Rule{rulePron = ["co" := "kɔ"], ruleExamples = ["cochon" := "kɔ.ʃɔ̃"]}
+ , "de" := Rule{rulePron = ["de" := "də"], ruleExamples = ["demi" := "də.mi"]}
+ , "de" := Rule{rulePron = ["de" := "də"], ruleExamples = ["demi" := "də.mi"]}
+ , "deau" := Rule{rulePron = ["deau" := "do"], ruleExamples = ["rideau" := "ʁi.do"]}
+ , "dent" := Rule{rulePron = ["dent" := "dɑ̃"], ruleExamples = ["dent" := "dɑ̃"]}
+ , "deuil" := Rule{rulePron = ["deuil" := "dœj"], ruleExamples = ["deuil" := "dœj"]}
+ , "do" := Rule{rulePron = ["do" := "dɔ"], ruleExamples = ["doré" := "dɔ.ʁe"]}
+ , "drai" := Rule{rulePron = ["drai" := "dʁɛ"], ruleExamples = ["draisienne" := "dʁɛ.zjɛn"]}
+ , "du" := Rule{rulePron = ["du" := "dy"], ruleExamples = ["du" := "dy"]}
+ , "dule" := Rule{rulePron = ["dule" := "dyl"], ruleExamples = ["mucidule" := "my.si.dyl"]}
+ , "en" := Rule{rulePron = ["en" := "ɑ̃"], ruleExamples = ["en" := "ɑ̃"]}
+ , "ette" := Rule{rulePron = ["ette" := "ɛt"], ruleExamples = ["brouette" := "bʁu.ɛt"]}
+ , ending "blanc" := Rule{rulePron = [ending "blanc" := "blɑ̃"], ruleExamples = ["blanc" := "blɑ̃"]}
+ , "blanche" := Rule{rulePron = ["blanche" := "blɑ̃ʃ"], ruleExamples = ["blanche" := "blɑ̃ʃ"]}
+ , "blan" <> [LexemeConsonant] := Rule{rulePron = ["blan" <> [LexemeConsonant] := "blɑ̃"], ruleExamples = ["blanc" := "blɑ̃"]}
+ , "che" := Rule{rulePron = ["che" := "ʃə"], ruleExamples = ["cheval" := "ʃə.val"]}
+ , "val" := Rule{rulePron = ["val" := "val"], ruleExamples = ["cheval" := "ʃə.val"]}
+ , "fait" := Rule{rulePron = ["fait" := "fɛ"], ruleExamples = ["fait" := "fɛ"]}
+ , "fa" <> [LexemeConsonant] := Rule{rulePron = ["fa" <> [LexemeConsonant] := "fa"], ruleExamples = ["famille" := "fa.mij"]}
+ , "da" <> [LexemeConsonant] := Rule{rulePron = ["da" <> [LexemeConsonant] := "da"], ruleExamples = ["mandarine" := "mɑ̃.da.ʁin"]}
+ , "gin" <> [LexemeConsonant] := Rule{rulePron = ["gin" := "ʒɛ̃"], ruleExamples = ["gingembre" := "ʒɛ̃.ʒɑ̃bʁ"]}
+ , "gembre" := Rule{rulePron = ["gembre" := "ʒɑ̃bʁ"], ruleExamples = ["gingembre" := "ʒɛ̃.ʒɑ̃bʁ"]}
+ , "mille" := Rule{rulePron = ["mille" := "mij"], ruleExamples = ["famille" := "fa.mij"]}
+ , "man" <> [LexemeConsonant] := Rule{rulePron = ["man" <> [LexemeConsonant] := "mɑ̃"], ruleExamples = ["mandarine" := "mɑ̃.da.ʁin"]}
+ , "fram" <> [LexemeConsonant] := Rule{rulePron = ["fram" <> [LexemeConsonant] := "fʁɑ̃"], ruleExamples = ["framboise" := "fʁɑ̃.bwaz"]}
+ , "boise" := Rule{rulePron = ["boise" := "bwaz"], ruleExamples = ["framboise" := "fʁɑ̃.bwaz"]}
+ , "hibiscus" := Rule{rulePron = ["hi" := "i", "bis" := "bis", "cus" := "kys"], ruleExamples = ["hibiscus" := "i.bis.kys"]}
+ , word "mille" := Rule{rulePron = [word "mille" := "mil"], ruleExamples = ["mille" := "mil"]}
+ , "feu" := Rule{rulePron = ["feu" := "fø"], ruleExamples = ["feu" := "fø"]}
+ , "four" := Rule{rulePron = ["four" := "fuʁ"], ruleExamples = ["four" := "fuʁ"]}
+ , "feuille" := Rule{rulePron = ["feuille" := "fœj"], ruleExamples = ["feuille" := "fœj"]}
+ , "font" := Rule{rulePron = ["font" := "fɔ̃"], ruleExamples = ["font" := "fɔ̃"]}
+ , "fraise" := Rule{rulePron = ["fraise" := "fʁɛz"], ruleExamples = ["fraise" := "fʁɛz"]}
+ , "ga" := Rule{rulePron = ["ga" := "ga"], ruleExamples = ["alligator" := "a.li.ga.tɔʁ"]}
+ , "ge" := Rule{rulePron = ["ge" := "ʒə"], ruleExamples = ["gelée" := "ʒə.le"]}
+ , "grue" := Rule{rulePron = ["grue" := "gʁy"], ruleExamples = ["grue" := "gʁy"]}
+ , "sque" := Rule{rulePron = ["sque" := "skə"], ruleExamples = ["squelette" := "skə.lɛt"]}
+ , "lette" := Rule{rulePron = ["lette" := "lɛt"], ruleExamples = ["squelette" := "skə.lɛt"]}
+ , "geoir" := Rule{rulePron = ["geoir" := "ʒwaʁ"], ruleExamples = ["plongeoir" := "plɔ̃.ʒwaʁ"]}
+ , "geur" := Rule{rulePron = ["geur" := "ʒœʁ"], ruleExamples = ["nageur" := "na.ʒœʁ"]}
+ , "geuse" := Rule{rulePron = ["geuse" := "ʒøz"], ruleExamples = ["nageuse" := "na.ʒøz"]}
+ , "gi" <> [LexemeConsonant] := Rule{rulePron = ["gi" <> [LexemeConsonant] := "ʒi"], ruleExamples = ["gilet" := "ʒi.lɛ"]}
+ , "glace" := Rule{rulePron = ["glace" := "glas"], ruleExamples = ["glace" := "glas"]}
+ , "gnon" := Rule{rulePron = ["gnon" := "ɲɔ̃"], ruleExamples = ["champignon" := "ʃɑ̃.pi.ɲɔ̃"]}
+ , "gou" := Rule{rulePron = ["gou" := "gu"], ruleExamples = ["gouttière" := "gu.tjɛʁ"]}
+ , "gue" := Rule{rulePron = ["gue" := "gə"], ruleExamples = ["marguerite" := "maʁ.gə.ʁit"]}
+ , "gâ" := Rule{rulePron = ["gâ" := "ga"], ruleExamples = ["gâté" := "ga.te"]}
+ , "gé" := Rule{rulePron = ["gé" := "ʒe"], ruleExamples = ["orangé" := "ɔ.ʁɑ̃.ʒe"]}
+ , "gée" := Rule{rulePron = ["gée" := "ʒe"], ruleExamples = ["orangée" := "ɔ.ʁɑ̃.ʒe"]}
+ , "hi" := Rule{rulePron = ["hi" := "i"], ruleExamples = ["hippopotame" := "i.pɔ.pɔ.tam"]}
+ , "ppo" := Rule{rulePron = ["ppo" := "pɔ"], ruleExamples = ["hippopotame" := "i.pɔ.pɔ.tam"]}
+ , "tame" := Rule{rulePron = ["tame" := "tam"], ruleExamples = ["hippopotame" := "i.pɔ.pɔ.tam"]}
+ , "ho" := Rule{rulePron = ["ho" := "o"], ruleExamples = ["homo" := "o.mo"]}
+ , "hêtre" := Rule{rulePron = ["hêtre" := "ɛtʁ"], ruleExamples = ["hêtre" := "ɛtʁ"]}
+ , "é" := Rule{rulePron = ["é" := "e"], ruleExamples = ["éclat" := "e.kla"]}
+ , "i" := Rule{rulePron = ["i" := "i"], ruleExamples = ["ibis" := "i.bis"]}
+ , "illet" := Rule{rulePron = ["illet" := "jɛ"], ruleExamples = ["œillet" := "œ.jɛ"]}
+ , "illo" := Rule{rulePron = ["illo" := "jo"], ruleExamples = ["maillot" := "ma.jo"]}
+ , "ja" := Rule{rulePron = ["ja" := "ʒa"], ruleExamples = ["jacinthe" := "ʒa.sɛ̃t"]}
+ , "jas" := Rule{rulePron = ["jas" := "ʒas"], ruleExamples = ["jasmin" := "ʒas.mɛ̃"]}
+ , "je" := Rule{rulePron = ["je" := "ʒə"], ruleExamples = ["jetée" := "ʒə.te"]}
+ , "jon" <> [LexemeConsonant] := Rule{rulePron = ["jon" := "ʒɔ̃"], ruleExamples = ["jonquille" := "ʒɔ̃.kij"]}
+ , "ju" := Rule{rulePron = ["ju" := "ʒy"], ruleExamples = ["judo" := "ʒy.do"]}
+ , "kan" <> [LexemeConsonant] := Rule{rulePron = ["kan" <> [LexemeConsonant] := "kɑ̃"], ruleExamples = ["kangourou" := "kɑ̃.gu.ʁu"]}
+ , "gou" := Rule{rulePron = ["gou" := "gu"], ruleExamples = ["kangourou" := "kɑ̃.gu.ʁu"]}
+ , "rou" := Rule{rulePron = ["rou" := "ʁu"], ruleExamples = ["kangourou" := "kɑ̃.gu.ʁu"]}
+ , "rousse" := Rule{rulePron = ["rousse" := "ʁus"], ruleExamples = ["rousse" := "ʁus"]}
+ , "la" := Rule{rulePron = ["la" := "la"], ruleExamples = ["la" := "la"]}
+ , "lac" := Rule{rulePron = ["lac" := "lak"], ruleExamples = ["lac" := "lak"]}
+ , "langue" := Rule{rulePron = ["langue" := "lɑ̃g"], ruleExamples = ["langue" := "lɑ̃g"]}
+ , "le" := Rule{rulePron = ["le" := "lə"], ruleExamples = ["le" := "lə"]}
+ , "li" := Rule{rulePron = ["li" := "li"], ruleExamples = ["pissenlit" := "pi.sɑ̃.li"]}
+ , "lier" := Rule{rulePron = ["lier" := "lje"], ruleExamples = ["voilier" := "vwa.lje"]}
+ , "lin" <> [LexemeBorder] := Rule{rulePron = ["lin" := "lɛ̃"], ruleExamples = ["merlin" := "mɛʁ.lɛ̃"]}
+ , "lion" := Rule{rulePron = ["lion" := "ljɔ̃"], ruleExamples = ["lion" := "ljɔ̃"]}
+ , "lionne" := Rule{rulePron = ["lionne" := "ljɔ̃n"], ruleExamples = ["lionne" := "ljɔ̃n"]}
+ , "lla" := Rule{rulePron = ["lla" := "la"], ruleExamples = ["calla" := "ka.la"]}
+ , "lli" := Rule{rulePron = ["lli" := "li"], ruleExamples = ["alligator" := "a.li.ga.tɔʁ"]}
+ , "llon" := Rule{rulePron = ["llon" := "jɔ̃"], ruleExamples = ["papillon" := "pa.pi.jɔ̃"]}
+ , "llume" := Rule{rulePron = ["llume" := "lym"], ruleExamples = ["allume" := "a.lym", "allume-feu" := "a.lym.fø"]}
+ , "lu" := Rule{rulePron = ["lu" := "ly"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+ , "ly" := Rule{rulePron = ["ly" := "li"], ruleExamples = ["polypore" := "pɔ.li.pɔʁ"]}
+ , "lé" := Rule{rulePron = ["lé" := "le"], ruleExamples = ["gelé" := "ʒə.le"]}
+ , "leur" := Rule{rulePron = ["leur" := "lœʁ"], ruleExamples = ["leur" := "lœʁ"]}
+ , "griffe" := Rule{rulePron = ["griffe" := "gʁif"], ruleExamples = ["griffe" := "gʁif"]}
+ , "ra" := Rule{rulePron = ["ra" := "ʁa"], ruleExamples = ["ra" := "ʁa"]}
+ , "ma" := Rule{rulePron = ["ma" := "ma"], ruleExamples = ["ma" := "ma"]}
+ , "mar" <> [LexemeConsonant] := Rule{rulePron = ["mar" <> [LexemeConsonant] := "maʁ"], ruleExamples = ["marguerite" := "maʁ.gə.ʁit"]}
+ , "masque" := Rule{rulePron = ["masque" := "mask"], ruleExamples = ["masque" := "mask"]}
+ , "mer" <> [LexemeConsonant] := Rule{rulePron = ["mer" <> [LexemeConsonant] := "mɛʁ"], ruleExamples = ["merlin" := "mɛʁ.lɛ̃"]}
+ , "mi" := Rule{rulePron = ["mi" := "mi"], ruleExamples = ["demi" := "də.mi"]}
+ , "miel" := Rule{rulePron = ["miel" := "mjɛl"], ruleExamples = ["miel" := "mjɛl"]}
+ , "mmo" := Rule{rulePron = ["mmo" := "mɔ"], ruleExamples = ["immobile" := "i.mɔ.bil"]}
+ , "mo" := Rule{rulePron = ["mo" := "mɔ"], ruleExamples = ["moto" := "mɔ.to"]}
+ , -- , "mon" := Rule{rulePron = ["mon" := "mɔ̃"], ruleExamples = ["montre" := "mɔ̃"]}
+ "montre" := Rule{rulePron = ["montre" := "mɔ̃tʁ"], ruleExamples = ["montre" := "mɔ̃tʁ"]}
+ , "montrent" := Rule{rulePron = ["montrent" := "mɔ̃tʁ"], ruleExamples = ["montrent" := "mɔ̃tʁ"]}
+ , -- , "tre" := Rule{rulePron = ["tre" := "tʁ"], ruleExamples = ["montre" := "tʁ"]}
+ "mu" := Rule{rulePron = ["mu" := "my"], ruleExamples = ["mucidule" := "my.si.dyl"]}
+ , "mène" := Rule{rulePron = ["mène" := "mɛn"], ruleExamples = ["promène" := "pʁɔ.mɛn"]}
+ , "mènent" := Rule{rulePron = ["mènent" := "mɛn"], ruleExamples = ["promènent" := "pʁɔ.mɛn"]}
+ , "na" := Rule{rulePron = ["na" := "na"], ruleExamples = ["na" := "na"]}
+ , "nette" := Rule{rulePron = ["nette" := "nɛt"], ruleExamples = ["lunette" := "ly.nɛt", "lunettes" := "ly.nɛt"]}
+ , "niche" := Rule{rulePron = ["niche" := "niʃ"], ruleExamples = ["péniche" := "pe.niʃ"]}
+ , "nnet" := Rule{rulePron = ["nnet" := "nɛ"], ruleExamples = ["bonnet" := "bɔ.nɛ"]}
+ , "noc" := Rule{rulePron = ["noc" := "nɔk"], ruleExamples = ["nocturne" := "nɔk.tyʁn"]}
+ , "nou" := Rule{rulePron = ["nou" := "nu"], ruleExamples = ["nourrit" := "nu.ʁi"]}
+ , "o" := Rule{rulePron = ["o" := "ɔ"], ruleExamples = ["orange" := "ɔ.ʁɑ̃ʒ"]}
+ , "ou" := Rule{rulePron = ["ou" := "u"], ruleExamples = ["ou" := "u"]}
+ , "pa" := Rule{rulePron = ["pa" := "pa"], ruleExamples = ["papillon" := "pa.pi.jɔ̃"]}
+ , "paque" := Rule{rulePron = ["paque" := "pak"], ruleExamples = ["paquebot" := "pak.bo"]}
+ , "passe" := Rule{rulePron = ["passe" := "pas"], ruleExamples = ["passerelle" := "pas.ʁɛl"]}
+ , "pi" := Rule{rulePron = ["pi" := "pi"], ruleExamples = ["papillon" := "pa.pi.jɔ̃"]}
+ , "pi" := Rule{rulePron = ["pi" := "pi"], ruleExamples = ["pissenlit" := "pi.sɑ̃.li"]}
+ , "plon" := Rule{rulePron = ["plon" := "plɔ̃"], ruleExamples = ["plongeoir" := "plɔ̃.ʒwaʁ"]}
+ , "pneu" := Rule{rulePron = ["pneu" := "pnø"], ruleExamples = ["pneumatique" := "pnø.ma.tik"]}
+ , "po" := Rule{rulePron = ["po" := "pɔ"], ruleExamples = ["polypore" := "pɔ.li.pɔʁ"]}
+ , "foin" := Rule{rulePron = ["foin" := "fwɛ̃"], ruleExamples = ["foin" := "fwɛ̃"]}
+ , "pon" := Rule{rulePron = ["pon" := "pɔ̃"], ruleExamples = ["pont" := "pɔ̃"]}
+ , "pore" := Rule{rulePron = ["pore" := "pɔʁ"], ruleExamples = ["polypore" := "pɔ.li.pɔʁ"]}
+ , "porte" := Rule{rulePron = ["porte" := "pɔʁt"], ruleExamples = ["porte" := "pɔʁt"]}
+ , "pro" := Rule{rulePron = ["pro" := "pʁɔ"], ruleExamples = ["promène" := "pʁɔ.mɛn"]}
+ , "pâ" := Rule{rulePron = ["pâ" := "pa"], ruleExamples = ["pâquerette" := "pa.kʁɛt"]} -- ɑ
+ , "pé" := Rule{rulePron = ["pé" := "pe"], ruleExamples = ["péniche" := "pe.niʃ"]}
+ , "que" := Rule{rulePron = ["que" := "kə"], ruleExamples = ["querelle" := "kə.ʁɛl"]}
+ , "querette" := Rule{rulePron = ["querette" := "kʁɛt"], ruleExamples = ["pâquerette" := "pa.kʁɛt"]}
+ , "queuse" := Rule{rulePron = ["queuse" := "køz"], ruleExamples = ["visqueuse" := "vis.køz"]}
+ , "quille" := Rule{rulePron = ["quille" := "kij"], ruleExamples = ["jonquille" := "ʒɔ̃.kij"]}
+ , "quipe" := Rule{rulePron = ["quipe" := "kip"], ruleExamples = ["équipe" := "e.kip"]}
+ , "range" := Rule{rulePron = ["range" := "ʁɑ̃ʒ"], ruleExamples = ["orange" := "ɔ.ʁɑ̃ʒ"]}
+ , "rangent" := Rule{rulePron = ["rangent" := "ʁɑ̃ʒ"], ruleExamples = ["rangent" := "ʁɑ̃ʒ"]}
+ , "ran" <> [LexemeConsonant] := Rule{rulePron = ["range" <> [LexemeConsonant] := "ʁɑ̃"], ruleExamples = ["orangé" := "ɔ.ʁɑ̃.ʒe"]}
+ , "relle" := Rule{rulePron = ["relle" := "ʁɛl"], ruleExamples = ["passerelle" := "pas.ʁɛl"]}
+ , -- , "ra" := Rule{rulePron = ["ra" := "ʁa"], ruleExamples = ["girafe" := "ʒi.ʁaf"]}
+ "rafe" := Rule{rulePron = ["rafe" := "ʁaf"], ruleExamples = ["girafe" := "ʒi.ʁaf"]}
+ , "aigle" := Rule{rulePron = ["aigle" := "ɛgl"], ruleExamples = ["aigle" := "ɛgl"]}
+ , "cor" <> [LexemeConsonant] := Rule{rulePron = ["cor" <> [LexemeConsonant] := "kɔʁ"], ruleExamples = ["corbeau" := "kɔʁ.bo"]}
+ , "ri" := Rule{rulePron = ["ri" := "ʁi"], ruleExamples = ["rideau" := "ʁi.do"]}
+ , "rhi" := Rule{rulePron = ["rhi" := "ʁi"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+ , "no" := Rule{rulePron = ["no" := "nɔ"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+ , "cé" := Rule{rulePron = ["cé" := "se"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+ , "rhinocéros" := Rule{rulePron = ["rhi" := "ʁi", "no" := "nɔ", "cé" := "se", "ros" <> [LexemeMeaning "animal"] := "ʁɔs"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+ , "no" := Rule{rulePron = ["no" := "nɔ"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+ , "cé" := Rule{rulePron = ["cé" := "se"], ruleExamples = ["rhinocéros" := "ʁi.nɔ.se.ʁɔs"]}
+ , "rine" := Rule{rulePron = ["rine" := "ʁin"], ruleExamples = ["marine" := "ma.ʁin"]}
+ , "rite" := Rule{rulePron = ["rite" := "ʁit"], ruleExamples = ["marguerite" := "maʁ.gə.ʁit"]}
+ , "ro" := Rule{rulePron = ["ro" := "rɔ"], ruleExamples = ["robot" := "rɔ.bo"]}
+ , "rose" := Rule{rulePron = ["rose" := "rɔz"], ruleExamples = ["rose" := "rɔz"]}
+ , "rou" := Rule{rulePron = ["rou" := "ʁu"], ruleExamples = ["rouler" := "ʁu.le"]}
+ , "rouge" := Rule{rulePron = ["rouge" := "ʁuʒ"], ruleExamples = ["rouge" := "ʁuʒ"]}
+ , "rri" := Rule{rulePron = ["rri" := "ʁi"], ruleExamples = ["nourrit" := "nu.ʁi"]}
+ , "ré" := Rule{rulePron = ["ré" := "ʁe"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+ , "sa" := Rule{rulePron = ["sa" := "sa"], ruleExamples = ["satellite" := "sa.te.lit"]}
+ , begining "singe" := Rule{rulePron = [begining "singe" := "sɛ̃ʒ"], ruleExamples = ["singe" := "sɛ̃ʒ"]}
+ , "buse" := Rule{rulePron = ["buse" := "byz"], ruleExamples = ["buse" := "byz"]}
+ , "bulle" := Rule{rulePron = ["bulle" := "byl"], ruleExamples = ["bulle" := "byl"]}
+ , "tigre" := Rule{rulePron = ["tigre" := "tigʁ"], ruleExamples = ["tigre" := "tigʁ"]}
+ , "tigresse" := Rule{rulePron = ["ti" := "ti", "gresse" := "gʁɛs"], ruleExamples = ["tigresse" := "ti.gʁɛs"]}
+ , "lombe" := Rule{rulePron = ["lombe" := "lɔ̃b"], ruleExamples = ["colombe" := "kɔ.lɔ̃b"]}
+ , "sauve" := Rule{rulePron = ["sauve" := "sov"], ruleExamples = ["sauvetage" := "sov.taʒ"]}
+ , "scine" := Rule{rulePron = ["scine" := "sin"], ruleExamples = ["piscine" := "pi.sin"]}
+ , "short" := Rule{rulePron = ["short" := "ʃɔʁt"], ruleExamples = ["short" := "ʃɔʁt"]}
+ , "ssen" := Rule{rulePron = ["ssen" := "sɑ̃"], ruleExamples = ["pissenlit" := "pi.sɑ̃.li"]}
+ , "cha" := Rule{rulePron = ["cha" := "ʃa"], ruleExamples = ["cha" := "ʃa"]}
+ , "chasse" := Rule{rulePron = ["chasse" := "ʃas"], ruleExamples = ["chasse" := "ʃas"]}
+ , "chassent" := Rule{rulePron = ["chassent" := "ʃas"], ruleExamples = ["chassent" := "ʃas"]}
+ , "sur" := Rule{rulePron = ["sur" := "syʁ"], ruleExamples = ["sur" := "syʁ"]}
+ , "ta" := Rule{rulePron = ["ta" := "ta"], ruleExamples = ["ta" := "ta"]}
+ , "tage" := Rule{rulePron = ["tage" := "taʒ"], ruleExamples = ["sauvetage" := "sov.taʒ"]}
+ , "tan" <> [LexemeConsonant] := Rule{rulePron = ["tan" <> [LexemeConsonant] := "tɑ̃"], ruleExamples = ["tan" := "tɑ̃"]}
+ , "tellite" := Rule{rulePron = ["te" <> [LexemeDoubleConsonant] := "te", "llite" := "lit"], ruleExamples = ["satellite" := "sa.te.lit"]}
+ , "terie" := Rule{rulePron = ["terie" := "tʁi"], ruleExamples = ["poterie" := "pɔ.tʁi"]}
+ , "thème" := Rule{rulePron = ["thème" := "tɛm"], ruleExamples = ["chrysanthème" := "kʁi.zɑ̃.tɛm"]}
+ , "tient" := Rule{rulePron = ["tient" := "tjɛ̃"], ruleExamples = ["tient" := "tjɛ̃"]}
+ , "tier" := Rule{rulePron = ["tier" := "tje"], ruleExamples = ["chalutier" := "ʃa.ly.tje"]}
+ , "tion" := Rule{rulePron = ["tion" := "sjɔ̃"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+ , "ssion" := Rule{rulePron = ["ssion" := "sjɔ̃"], ruleExamples = ["passion" := "pa.sjɔ̃"]}
+ , "tille" := Rule{rulePron = ["tille" := "tij"], ruleExamples = ["myrtille" := "miʁ.tij"]}
+ , "tique" := Rule{rulePron = ["tique" := "tik"], ruleExamples = ["pneumatique" := "pnø.ma.tik"]}
+ , "tir" := Rule{rulePron = ["tir" := "tiʁ"], ruleExamples = ["tire" := "tiʁ"]}
+ , "pêche" := Rule{rulePron = ["pêche" := "pɛʃ"], ruleExamples = ["pêche" := "pɛʃ"]}
+ , "vert" := Rule{rulePron = ["vert" := "vɛʁ"], ruleExamples = ["vert" := "vɛʁ"]}
+ , "myr" := Rule{rulePron = ["myr" := "miʁ"], ruleExamples = ["myrtille" := "miʁ.tij"]}
+ , begining "si" := Rule{rulePron = [begining "si" := "si"], ruleExamples = ["sirop" := "si.ʁo"]}
+ , ending "rop" := Rule{rulePron = ["rop" := "ʁo"], ruleExamples = ["sirop" := "si.ʁo"]}
+ , "tor" := Rule{rulePron = ["tor" := "tɔʁ"], ruleExamples = ["alligator" := "a.li.ga.tɔʁ"]}
+ , "touche" := Rule{rulePron = ["touche" := "tuʃ"], ruleExamples = ["touche" := "tuʃ"]}
+ , "tris" <> [LexemeConsonant] := Rule{rulePron = ["tris" := "tʁis"], ruleExamples = ["ma" := "ma"]}
+ , "truffe" := Rule{rulePron = ["truffe" := "tʁyf"], ruleExamples = ["Truffe" := "tʁyf"]}
+ , "trône" := Rule{rulePron = ["trône" := "tʁon"], ruleExamples = ["trône" := "tʁon"]}
+ , "ttière" := Rule{rulePron = ["ttière" := "tjɛʁ"], ruleExamples = ["gouttière" := "gu.tjɛʁ"]}
+ , "tu" := Rule{rulePron = ["tu" := "ty"], ruleExamples = ["tuba" := "ty.ba"]}
+ , "turne" := Rule{rulePron = ["turne" := "tyʁn"], ruleExamples = ["nocturne" := "nɔk.tyʁn"]}
+ , "té" := Rule{rulePron = ["té" := "te"], ruleExamples = ["gâté" := "ga.te"]}
+ , "vache" := Rule{rulePron = ["vache" := "vaʃ"], ruleExamples = ["vache" := "vaʃ"]}
+ , "vec" := Rule{rulePron = ["vec" := "vɛk"], ruleExamples = ["avec" := "a.vɛk"]}
+ , "vis" := Rule{rulePron = ["vis" := "vis"], ruleExamples = ["visqueuse" := "vis.køz"]}
+ , "vo" := Rule{rulePron = ["vo" := "vɔ"], ruleExamples = ["révolution" := "ʁe.vɔ.ly.sjɔ̃"]}
+ , "von" := Rule{rulePron = ["von" := "vɔ̃"], ruleExamples = ["savon" := "sa.vɔ̃"]}
+ , "sson" := Rule{rulePron = ["sson" := "sɔ̃"], ruleExamples = ["boisson" := "bwa.sɔ̃"]}
+ , "zeuse" := Rule{rulePron = ["zeuse" := "zøz"], ruleExamples = ["gazeuse" := "ga.zøz"]}
+ , "voi" := Rule{rulePron = ["voi" := "vwa"], ruleExamples = ["voilier" := "vwa.lje"]}
+ , "vé" := Rule{rulePron = ["vé" := "ve"], ruleExamples = ["vélo" := "ve.lo"]}
+ , "fête" := Rule{rulePron = ["fête" := "fɛt"], ruleExamples = ["fête" := "fɛt"]}
+ , "fruit" := Rule{rulePron = ["fruit" := "fʁɥi"], ruleExamples = ["fruit" := "fʁɥi"]}
+ , "nane" := Rule{rulePron = ["nane" := "nan"], ruleExamples = ["banane" := "ba.nan"]}
+ , "pomme" := Rule{rulePron = ["pomme" := "pɔm"], ruleExamples = ["pomme" := "pɔm"]}
+ , "ce" := Rule{rulePron = ["ce" := "sə"], ruleExamples = ["cerise" := "sə.ʁiz"]}
+ , "rise" := Rule{rulePron = ["rise" := "ʁiz"], ruleExamples = ["cerise" := "sə.ʁiz"]}
+ , "yo" := Rule{rulePron = ["yo" := "jo"], ruleExamples = ["Yohan" := "jo.an"]}
+ , "é" := Rule{rulePron = ["é" := "e"], ruleExamples = ["équipe" := "e.kip"]}
+ , "dé" := Rule{rulePron = ["dé" := "de"], ruleExamples = ["décorations" := "de.kɔ.ʁa.sjɔ̃"]}
+ , "œ" := Rule{rulePron = ["œ" := "œ"], ruleExamples = ["œillet" := "œ.jɛ"]}
+ , "ti" := Rule{rulePron = ["ti" := "ti"], ruleExamples = ["d'artifices" := "daʁ.ti.fis"]}
+ , "fice" := Rule{rulePron = ["fice" := "fis"], ruleExamples = ["d'artifices" := "daʁ.ti.fis"]}
+ , -- kɑ̃.ta.lu
+ "can" <> [LexemeConsonant] := Rule{rulePron = ["can" <> [LexemeConsonant] := "kɑ̃"], ruleExamples = ["cantaloup" := "kɑ̃.ta.lu"]}
+ , ending "loup" := Rule{rulePron = [ending "loup" := "lu"], ruleExamples = ["cantaloup" := "kɑ̃.ta.lu"]}
+ , begining "d'ar" := Rule{rulePron = [begining "d'ar" := "daʁ"], ruleExamples = ["d'artifices" := "daʁ.ti.fis"]}
+ , "mustang" := Rule{rulePron = ["mus" := "mys", "tang" := "tɑ̃g"], ruleExamples = ["mustang" := "mys.tɑ̃g"]}
+ , "tarte" := Rule{rulePron = ["tarte" := "taʁt"], ruleExamples = ["tarte" := "taʁt"]}
+ , "citron" := Rule{rulePron = ["ci" := "si", "tron" := "tʁɔ̃"], ruleExamples = ["citron" := "si.tʁɔ̃"]}
+ , begining "d'o" := Rule{rulePron = [begining "d'o" := "dɔ"], ruleExamples = ["d'orange" := "dɔ.ʁɑ̃ʒ"]}
+ , begining "d'a" <> [LexemeConsonant] := Rule{rulePron = [begining "d'a" <> [LexemeConsonant] := "da"], ruleExamples = ["d'ananas" := "da.na.nas"]}
+ , word "d'ananas" := Rule{rulePron = ["d'a" <> [LexemeMeaning "fruit"] := "da", "na" <> [LexemeMeaning "fruit"] := "na", "nas" <> [LexemeMeaning "fruit"] := "nas"], ruleExamples = ["d'ananas" := "da.na.nas"]}
+ , [LexemeVowel] <> "san" <> [LexemeConsonant] := Rule{rulePron = [[LexemeVowel] <> "san" <> [LexemeConsonant] := "zɑ̃"], ruleExamples = ["chrysanthème" := "kʁi.zɑ̃.tɛm"]}
+ , [LexemeVowel] <> "sienne" := Rule{rulePron = [[LexemeVowel] <> "sienne" := "zjɛn"], ruleExamples = ["draisienne" := "dʁɛ.zjɛn"]}
+ , [LexemeVowel] <> "ya" := Rule{rulePron = [[LexemeVowel] <> "ya" := "ja"], ruleExamples = ["ya" := "ja"]}
+ , begining "absent" := Rule{rulePron = [begining "ab" := "ab", "sent" := "sɑ̃"], ruleExamples = ["absent" := "ab.sɑ̃", "absents" := "ab.sɑ̃"]}
+ , begining "exer" := Rule{rulePron = ["e" := "ɛ", "x" := "g.z", "er" := "ɛʁ"], ruleExamples = ["exercice" := "ɛg.zɛʁ.sis"]}
+ , begining "ya" := Rule{rulePron = [begining "ya" := "ja"], ruleExamples = ["ya" := "ja"]}
+ , begining "yacht" := Rule{rulePron = ["yacht" := "jɔt"], ruleExamples = ["yacht" := "jɔt"]}
+ , ending "bis" := Rule{rulePron = [ending "bis" := "bis"], ruleExamples = ["ibis" := "i.bis"]}
+ , ending "bo" := Rule{rulePron = [ending "bo" := "bo"], ruleExamples = ["bobo" := "bɔ.bo"]}
+ , ending "bot" := Rule{rulePron = [ending "bot" := "bo"], ruleExamples = ["robot" := "rɔ.bo"]}
+ , ending "cice" := Rule{rulePron = [ending "cice" := ["sis"]], ruleExamples = ["exercice" := "ɛg.zɛʁ.sis"]}
+ , ending "cices" := Rule{rulePron = [ending "cices" := ["sis"]], ruleExamples = ["exercices" := "ɛg.zɛʁ.sis"]}
+ , ending "co" := Rule{rulePron = ["co" := "ko"], ruleExamples = ["cocorico" := "kɔ.kɔ.ʁi.ko"]}
+ , ending "do" := Rule{rulePron = [ending "do" := "do"], ruleExamples = ["judo" := "ʒy.do"]}
+ , ending "e" := Rule{rulePron = [ending "e" := [""]], ruleExamples = ["gelée" := "ʒə.le"]}
+ , ending "han" := Rule{rulePron = [ending "han" := "an"], ruleExamples = ["Yohan" := "jo.an"]}
+ , ending "ler" := Rule{rulePron = [ending "ler" := "le"], ruleExamples = ["rouler" := "ʁu.le"]}
+ , ending "let" := Rule{rulePron = [ending "let" := "lɛ"], ruleExamples = ["gilet" := "ʒi.lɛ"]}
+ , ending "lo" := Rule{rulePron = [ending "lo" := "lo"], ruleExamples = ["vélo" := "ve.lo"]}
+ , ending "min" := Rule{rulePron = [ending "min" := "mɛ̃"], ruleExamples = ["jasmin" := "ʒas.mɛ̃"]}
+ , ending "mmo" := Rule{rulePron = [ending "mmo" := "mo"], ruleExamples = ["immo" := "i.mo"]}
+ , ending "mo" := Rule{rulePron = [ending "mo" := "mo"], ruleExamples = ["homo" := "o.mo"]}
+ , ending "mot" := Rule{rulePron = [ending "mot" := "mo"], ruleExamples = ["mot" := "mo"]}
+ , ending "doux" := Rule{rulePron = [ending "doux" := "du"], ruleExamples = ["doux" := "du"]}
+ , ending "not" := Rule{rulePron = [ending "not" := "no"], ruleExamples = ["canot" := "ka.no"]}
+ , ending "s" := Rule{rulePron = [ending "s" := [""]], ruleExamples = ["bulles" := "byl"]}
+ , ending "ent" := Rule{rulePron = [ending "ent" := [""]], ruleExamples = ["tirent" := "tiʁ"]}
+ , ending "t" := Rule{rulePron = [ending "t" := [""]], ruleExamples = []}
+ , ending "tan" := Rule{rulePron = [ending "tan" := "tɑ̃"], ruleExamples = ["tan" := "tɑ̃"]}
+ , "teau" := Rule{rulePron = ["teau" := "to"], ruleExamples = ["bateau" := "ba.to"]}
+ , "beau" := Rule{rulePron = ["beau" := "bo"], ruleExamples = ["corbeau" := "kɔʁ.bo"]}
+ , "ceau" := Rule{rulePron = ["ceau" := "so"], ruleExamples = ["lionceau" := "ljɔ̃.so"]}
+ , ending "to" := Rule{rulePron = [ending "to" := "to"], ruleExamples = ["moto" := "mɔ.to"]}
+ , ending "ts" := Rule{rulePron = [ending "ts" := [""]], ruleExamples = ["maillots" := "ma.jo"]}
+ , word "dans" := Rule{rulePron = [word "dans" := "dɑ̃"], ruleExamples = ["dans" := "dɑ̃"]}
+ , word "et" := Rule{rulePron = [word "et" := "e"], ruleExamples = ["et" := "e"]}
+ , word "des" := Rule{rulePron = ["des" := "de"], ruleExamples = ["des" := "de"]}
+ , word "les" := Rule{rulePron = [word "les" := "le"], ruleExamples = ["les" := "le"]}
+ , word "sous" := Rule{rulePron = [word "sous" := "su"], ruleExamples = ["sous" := "su"]}
+ , word "un" := Rule{rulePron = [word "un" := "œ̃"], ruleExamples = ["un" := "œ̃"]}
+ , word "une" := Rule{rulePron = [word "une" := "yn"], ruleExamples = ["une" := "yn"]}
+ , "coli" := Rule{rulePron = ["co" := "kɔ", "li" := "li"], ruleExamples = ["Escherichia coli" := "ɛ.ʃe.ʁi.ʃja.kɔ.li"]}
+ ]
+ & Pron.withCapital
+ & fromList
+
+{-
+, word "mer" :=
+ Rule
+ { rulePron =
+ [ "mer" := ["mɛʁ"]
+ ]
+ , ruleExamples = [["mer" & occurence]]
+ }
+, begining "mer" <> [LexemeConsonant] :=
+ Rule
+ { rulePron = [ "mer" := ["mɛʁ"] ]
+ , ruleExamples = [["mer" & occurence, "le"]]
+ }
+, begining "Mer" <> [LexemeConsonant] :=
+ Rule
+ { rulePron = [ "Mer" := ["mɛʁ"] ]
+ , ruleExamples = [["Mer" & occurence, "lin"]]
+ }
+, begining "Mer" <> [LexemeConsonant] :=
+ Rule
+ { rulePron = [ "Mer" := ["mɛʁ"] ]
+ , ruleExamples = [["Mer" & occurence, "lin"]]
+ }
+, "abstrait" :=
+ Rule
+ { rulePron =
+ [ "ab" := ["ap"] -- sic
+ , "strait" := ["stʁɛ"]
+ ]
+ , ruleExamples = [["abstrait" & occurence]]
+ }
+, "ab" :=
+ Rule
+ { rulePron = ["ab" := ["ab"]]
+ , ruleExamples = [["ab" & occurence, "solu"]]
+ }
+, "so" :=
+ Rule
+ { rulePron = ["so" := ["sɔ"]]
+ , ruleExamples = [["ab", "so" & occurence, "lu"]]
+ }
+, "lu" :=
+ Rule
+ { rulePron = ["lu" := ["ly"]]
+ , ruleExamples = [["lu" & occurence], ["abso", "lu" & occurence]]
+ }
+, "a" :=
+ Rule
+ { rulePron = ["a" := ["a"]]
+ , ruleExamples = [["a" & occurence]]
+ }
+, "llume" :=
+ Rule
+ { rulePron = ["llume" := ["lym"]]
+ , ruleExamples = [["a", "llume" & occurence]]
+ }
+, "cice" :=
+ Rule
+ { rulePron =
+ [ "cice" := ["sis"]
+ ]
+ , ruleExamples = [["exer", "cice" & occurence]]
+ }
+-}
--- /dev/null
+text {
+ font-variant-ligatures:none;
+}
{-# OPTIONS_GHC -w -Wall -fno-warn-missing-signatures -fno-warn-unused-imports #-}
import Test.Syd
-import Prelude qualified
-import Worksheets.Writing.LatinSpec qualified
+import Language.ChineseSpec qualified
+import Language.EnglishSpec qualified
+import Language.FrenchSpec qualified
+import RecipesSpec qualified
+import Rosetta.ReadingSpec qualified
+import Rosetta.WritingSpec qualified
+import WiktionarySpec qualified
+import Worksheets.Utils.Prelude
-main :: Prelude.IO ()
+main :: IO ()
main = sydTest spec
spec = do
- describe "Worksheets" do
- describe "Writing" do
- describe "LatinSpec" do
- Worksheets.Writing.LatinSpec.spec
+ RecipesSpec.spec
+
+-- WiktionarySpec.spec
+---- xdescribe "Language" do
+---- describe "Chinese" do
+---- Language.ChineseSpec.spec
+-- withTimeout 3000000 do
+-- withoutRetries do
+-- describe "Language" do
+-- describe "EnglishSpec" do
+-- Language.EnglishSpec.spec
+-- describe "FrenchSpec" do
+-- Language.FrenchSpec.spec
+
+-- withoutRetries do
+-- describe "Rosetta" do
+-- describe "ReadingSpec" do
+-- Rosetta.ReadingSpec.spec
+
+-- --describe "WritingSpec" do
+-- Rosetta.WritingSpec.spec
+
+-- describe "RosettaSpec" do
+-- Worksheets.Writing.RosettaSpec.spec
+++ /dev/null
-module Worksheets.Writing.LatinSpec where
-
-import Data.Function (($), (&), (.))
-import Data.Functor ((<&>))
-import Data.GenValidity.Map ()
-import Data.GenValidity.Sequence ()
-import Data.GenValidity.Set ()
-import Data.GenValidity.Text ()
-import Data.List qualified as List
-import Data.Text qualified as Text
-import Data.Validity.Map ()
-import Data.Validity.Set ()
-import Data.Validity.Text ()
-import GHC.Stack (HasCallStack)
-import System.FilePath (joinPath, pathSeparator, (<.>), (</>))
-import System.FilePath qualified as Sys
-import Test.Syd
-
-import Worksheets.Writing.Latin qualified
-
-runPart :: Sys.FilePath -> TestDefM outers () ()
-runPart part = do
- descrPath <- getTestDescriptionPath
- let dirPath =
- List.reverse descrPath
- <&> Text.unpack
- . Text.replace
- (Text.pack ".")
- (Text.singleton pathSeparator)
- & joinPath
- let inpPath = "tests" </> dirPath </> part <.> "txt"
- let outPath = "tests" </> dirPath </> part <.> "html"
- it part do
- goldenByteStringBuilderFile outPath $
- Worksheets.Writing.Latin.worksheet inpPath
-
-spec :: HasCallStack => Spec
-spec = do
- describe "frozen" do
- describe "let-it-go" do
- describe "en" do
- runPart "part1"
- runPart "part2"
- describe "fr" do
- runPart "part1"
- runPart "part2"
- runPart "part3"
- runPart "part4"
- runPart "part5"
- runPart "part6"
- runPart "part7"
- describe "in-summer" do
- describe "en" do
- runPart "part1"
- runPart "part2"
- runPart "part3"
- runPart "part4"
--- /dev/null
+Far over the Misty Mountains cold
+To dungeons deep and caverns old
+We must away, ere break of day
+To seek our pale enchanted gold
+
+The dwarves of yore made mighty spells
+While hammers fell like ringing bells
+In places deep, where dark things sleep
+In hollow halls beneath the fells
+
+For ancient king and elvish lord
+There many a gleaming golden hoard
+They shaped and wrought, and light they caught
+To hide in gems on hilt of sword
+
+On silver necklaces they strung
+The flowering stars, on crowns they hung
+The dragon-fire, on twisted wire
+They meshed the light of moon and sun
+
+Far over the Misty Mountains cold
+To dungeons deep and caverns old
+We must away, ere break of day
+To claim our long-forgotten gold
+
+Goblets they carved there for themselves
+And harps of gold, where no man delves
+There lay they long, and many a song
+Was sung unheard by men or elves
+The pines were roaring on the heights
+The wind was moaning in the night
+The fire was red, it flaming spread
+The trees like torches blazed with light
+
+The bells were ringing in the dale
+And men looked up with faces pale
+The dragon's ire, more fierce than fire
+Laid low their towers and houses frail
+
+The mountain smoked beneath the moon
+The dwarves, they heard the tramp of doom
+They fled the hall to dying fall
+Beneath his feet, beneath the moon
+
+Far over the Misty Mountains grim
+To dungeons deep and caverns dim
+We must away, ere break of day
+To win our harps and gold from him!
+
+The wind was on the withered heath
+But in the forest stirred no leaf
+There shadows lay be night or day
+And dark things silent crept beneath
+
+The wind came down from mountains cold
+And like a tide it roared and rolled
+The branches groaned, the forest moaned
+And leaves were laid upon the mould
+The wind went on from West to East;
+All movement in the forest ceased
+But shrill and harsh across the marsh
+Its whistling voices were released
+
+The grasses hissed, their tassels bent
+The reeds were rattling--on it went
+O'er shaken pool under heavens cool
+Where racing clouds were torn and rent
+
+It passed the Lonely Mountain bare
+And swept above the dragon's lair
+There black and dark lay boulders stark
+And flying smoke was in the air
+
+It left the world and took its flight
+Over the wide seas of the night
+The moon set sail upon the gale
+And stars were fanned to leaping light
+
+Under the Mountain dark and tall
+The King has come unto his hall!
+His foe is dead, the Worm of Dread
+And ever so his foes shall fall!
+
+The sword is sharp, the spear is long
+The arrow swift, the Gate is strong
+The heart is bold that looks on gold
+The dwarves no more shall suffer wrong
+The dwarves of yore made mighty spells
+While hammers fell like ringing bells
+In places deep, where dark things sleep
+In hollow halls beneath the fells
+
+On silver necklaces they strung
+The light of stars, on crowns they hung
+The dragon-fire, from twisted wire
+The melody of harps they wrung
+
+The mountain throne once more is freed!
+O! Wandering folk, the summons heed!
+Come haste! Come haste! Across the waste!
+The king of friend and kin has need
+
+Now call we over the mountains cold
+'Come back unto the caverns old!
+Here at the gates the king awaits
+His hands are rich with gems and gold
+
+The king has come unto his hall
+Under the Mountain dark and tall
+The Wyrm of Dread is slain and dead
+And ever so our foes shall fall
+
+Farewell we call to hearth and hall!
+Though wind may blow and rain may fall
+We must away, ere break of day
+Far over the wood and mountain tall
+
+To Rivendell, where Elves yet dwell
+In glades beneath the misty fell
+Through moor and waste we ride in haste
+And whither then we cannot tell
+
+With foes ahead, behind us dread
+Beneath the sky shall be our bed
+Until at last our toil be passed
+Our journey done, our errand sped
+
+We must away! We must away!
+We ride before the break of day!
--- /dev/null
+Far over the Misty Mountains cold
+To dungeons deep and caverns old
+We must away, ere break of day
+To seek our pale enchanted gold
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part1</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">B</div><div class="cell">e</div><div class="cell">e</div><div class="cell">s</div><div class="cell">'</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">u</div><div class="cell">z</div><div class="cell">z</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">k</div><div class="cell">i</div><div class="cell">d</div><div class="cell">s</div><div class="cell">'</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">l</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell">e</div><div class="cell">l</div><div class="cell">i</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">u</div><div class="cell">z</div><div class="cell">z</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">'</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell">e</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">e</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">r</div><div class="cell">i</div><div class="cell">n</div><div class="cell">k</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div></div>
-<div class="row"><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">u</div><div class="cell">p</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">g</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">u</div><div class="cell">r</div><div class="cell">n</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">r</div><div class="cell">o</div><div class="cell">b</div><div class="cell">a</div><div class="cell">b</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">t</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">r</div><div class="cell">g</div><div class="cell">e</div><div class="cell">o</div><div class="cell">u</div><div class="cell">s</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">n</div><div class="cell">e</div><div class="cell">d</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part2</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">I</div><div class="cell">'</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">i</div><div class="cell">n</div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">r</div><div class="cell">e</div><div class="cell">e</div><div class="cell">z</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">b</div><div class="cell">l</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">w</div><div class="cell">a</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">i</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">p</div><div class="cell">p</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">l</div><div class="cell">i</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">a</div><div class="cell">t</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">a</div><div class="cell">r</div><div class="cell">m</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">a</div><div class="cell">n</div><div class="cell">'</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">a</div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">u</div><div class="cell">d</div><div class="cell">d</div><div class="cell">i</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">i</div><div class="cell">n</div><div class="cell">k</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">u</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">m</div><div class="cell">a</div><div class="cell">g</div><div class="cell">i</div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">u</div><div class="cell">c</div><div class="cell">h</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">o</div><div class="cell">l</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">'</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
to solid water when it gets warm
And I can't wait to see
what my buddies all think of me
-Just imagine how much cooler I'll be
+Just imagine how much cooler
+I'll be
In summer
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part3</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">D</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">o</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">o</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">o</div><div class="cell">t</div><div class="cell">h</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">r</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">u</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">a</div><div class="cell">k</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">R</div><div class="cell">a</div><div class="cell">t</div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">a</div><div class="cell">t</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">a</div><div class="cell">d</div><div class="cell">o</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">W</div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell">e</div><div class="cell">r</div><div class="cell">'</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">o</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">i</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">a</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">u</div><div class="cell">d</div><div class="cell">d</div><div class="cell">l</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">B</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">'</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">p</div><div class="cell">p</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell">m</div><div class="cell">a</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part4</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">W</div><div class="cell">h</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">f</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">t</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">o</div><div class="cell">u</div><div class="cell">g</div><div class="cell">h</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">k</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">n</div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">r</div><div class="cell">e</div><div class="cell">a</div><div class="cell">m</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">O</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">e</div><div class="cell">l</div><div class="cell">a</div><div class="cell">x</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">n</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">u</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell">t</div><div class="cell">t</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">f</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">e</div><div class="cell">a</div><div class="cell">m</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">O</div><div class="cell">h</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">k</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">i</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">l</div><div class="cell">u</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">y</div><div class="cell">o</div><div class="cell">u</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">u</div><div class="cell">y</div><div class="cell">s</div><div class="cell">'</div><div class="cell">l</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">W</div><div class="cell">h</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">i</div><div class="cell">n</div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">r</div><div class="cell">o</div><div class="cell">z</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell">r</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part1</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">l</div><div class="cell">o</div><div class="cell">w</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">h</div><div class="cell">i</div><div class="cell">t</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">u</div><div class="cell">n</div><div class="cell">t</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">n</div><div class="cell">i</div><div class="cell">g</div><div class="cell">h</div><div class="cell">t</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">N</div><div class="cell">o</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">o</div><div class="cell">o</div><div class="cell">t</div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">e</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">A</div><div class="cell cell-space"> </div><div class="cell">k</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell">d</div><div class="cell">o</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">f</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">s</div><div class="cell">o</div><div class="cell">l</div><div class="cell">a</div><div class="cell">t</div><div class="cell">i</div><div class="cell">o</div><div class="cell">n</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">o</div><div class="cell">o</div><div class="cell">k</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">k</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell">'</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">Q</div><div class="cell">u</div><div class="cell">e</div><div class="cell">e</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">w</div><div class="cell">i</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">w</div><div class="cell">l</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">l</div><div class="cell">i</div><div class="cell">k</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">w</div><div class="cell">i</div><div class="cell">r</div><div class="cell">l</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">i</div><div class="cell">d</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">C</div><div class="cell">o</div><div class="cell">u</div><div class="cell">l</div><div class="cell">d</div><div class="cell">n</div><div class="cell">'</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">k</div><div class="cell">e</div><div class="cell">e</div><div class="cell">p</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">H</div><div class="cell">e</div><div class="cell">a</div><div class="cell">v</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">k</div><div class="cell">n</div><div class="cell">o</div><div class="cell">w</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">r</div><div class="cell">i</div><div class="cell">e</div><div class="cell">d</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part2</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">C</div><div class="cell">a</div><div class="cell">n</div><div class="cell">'</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">a</div><div class="cell">c</div><div class="cell">k</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">y</div><div class="cell">m</div><div class="cell">o</div><div class="cell">r</div><div class="cell">e</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">u</div><div class="cell">r</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">w</div><div class="cell">a</div><div class="cell">y</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">l</div><div class="cell">a</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">o</div><div class="cell">r</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">n</div><div class="cell">'</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">a</div><div class="cell">r</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">w</div><div class="cell">h</div><div class="cell">a</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">y</div><div class="cell">'</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">o</div><div class="cell">i</div><div class="cell">n</div><div class="cell">g</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">a</div><div class="cell">y</div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">t</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">a</div><div class="cell">g</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">T</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">l</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">o</div><div class="cell">t</div><div class="cell">h</div><div class="cell">e</div><div class="cell">r</div><div class="cell">e</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">a</div><div class="cell">n</div><div class="cell">y</div><div class="cell">w</div><div class="cell">a</div><div class="cell">y</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part1</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">’</div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">t</div><div class="cell">a</div><div class="cell">l</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">o</div><div class="cell">u</div><div class="cell">c</div><div class="cell">e</div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">u</div><div class="cell">i</div><div class="cell">t</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell">i</div><div class="cell">g</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">e</div><div class="cell">i</div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">U</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">o</div><div class="cell">y</div><div class="cell">a</div><div class="cell">u</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">l</div><div class="cell">i</div><div class="cell">t</div><div class="cell">u</div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">:</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">m</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">a</div><div class="cell">c</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">j</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">q</div><div class="cell">u</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">u</div><div class="cell">r</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">i</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">m</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">I</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">r</div><div class="cell">o</div><div class="cell">p</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">o</div><div class="cell">r</div><div class="cell">t</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">j</div><div class="cell">’</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">u</div><div class="cell">t</div><div class="cell">t</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">a</div><div class="cell">i</div><div class="cell">n</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part2</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">C</div><div class="cell">a</div><div class="cell">c</div><div class="cell">h</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">r</div><div class="cell">s</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">’</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">r</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">F</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">a</div><div class="cell">t</div><div class="cell">t</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">i</div><div class="cell">o</div><div class="cell">n</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">c</div><div class="cell">r</div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">r</div><div class="cell">v</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">a</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">a</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">’</div><div class="cell">é</div><div class="cell">t</div><div class="cell">a</div><div class="cell">t</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">’</div><div class="cell">â</div><div class="cell">m</div><div class="cell">e</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">s</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">i</div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part3</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">D</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell">i</div><div class="cell">r</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">a</div><div class="cell">m</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div><div class="cell cell-space"> </div><div class="cell">D</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">!</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">C</div><div class="cell">’</div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">c</div><div class="cell">i</div><div class="cell">d</div><div class="cell">é</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">’</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">’</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div><div class="cell">s</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell">f</div><div class="cell">a</div><div class="cell">n</div><div class="cell">c</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">é</div><div class="cell">t</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">e</div><div class="cell">r</div><div class="cell">d</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">r</div><div class="cell">o</div><div class="cell">i</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">i</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">b</div><div class="cell">e</div><div class="cell">r</div><div class="cell">t</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part4</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">Q</div><div class="cell">u</div><div class="cell">a</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">e</div><div class="cell">n</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">h</div><div class="cell">a</div><div class="cell">u</div><div class="cell">t</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">o</div><div class="cell">u</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">e</div><div class="cell">m</div><div class="cell">b</div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">i</div><div class="cell">n</div><div class="cell">s</div><div class="cell">i</div><div class="cell">g</div><div class="cell">n</div><div class="cell">i</div><div class="cell">f</div><div class="cell">i</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">r</div><div class="cell">i</div><div class="cell">s</div><div class="cell">t</div><div class="cell">e</div><div class="cell">s</div><div class="cell">s</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">a</div><div class="cell">n</div><div class="cell">g</div><div class="cell">o</div><div class="cell">i</div><div class="cell">s</div><div class="cell">s</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">m</div><div class="cell">’</div><div class="cell">o</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">q</div><div class="cell">u</div><div class="cell">i</div><div class="cell">t</div><div class="cell">t</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">p</div><div class="cell">u</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">o</div><div class="cell">n</div><div class="cell">g</div><div class="cell">t</div><div class="cell">e</div><div class="cell">m</div><div class="cell">p</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">e</div><div class="cell">u</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">q</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">u</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">a</div><div class="cell">i</div><div class="cell">r</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">D</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">e</div><div class="cell">t</div><div class="cell">t</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">a</div><div class="cell">g</div><div class="cell">i</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">e</div><div class="cell">i</div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">y</div><div class="cell">s</div><div class="cell">t</div><div class="cell">è</div><div class="cell">r</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">a</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">i</div><div class="cell">s</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">i</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part5</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">é</div><div class="cell">t</div><div class="cell">o</div><div class="cell">i</div><div class="cell">l</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">t</div><div class="cell">e</div><div class="cell">n</div><div class="cell">d</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">b</div><div class="cell">r</div><div class="cell">a</div><div class="cell">s</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">M</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">l</div><div class="cell">à</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">o</div><div class="cell">u</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">à</div><div class="cell">.</div><div class="cell cell-space"> </div><div class="cell">P</div><div class="cell">e</div><div class="cell">r</div><div class="cell">d</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part6</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">M</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">v</div><div class="cell">o</div><div class="cell">i</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">v</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">u</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">i</div><div class="cell">e</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell">v</div><div class="cell">a</div><div class="cell">h</div><div class="cell">i</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">e</div><div class="cell">s</div><div class="cell">p</div><div class="cell">a</div><div class="cell">c</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">M</div><div class="cell">o</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">â</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">’</div><div class="cell">e</div><div class="cell">x</div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">s</div><div class="cell">s</div><div class="cell">i</div><div class="cell">n</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">e</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">c</div><div class="cell">u</div><div class="cell">l</div><div class="cell">p</div><div class="cell">t</div><div class="cell">a</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">l</div><div class="cell">a</div><div class="cell">c</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">E</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">e</div><div class="cell">n</div><div class="cell">s</div><div class="cell">é</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">o</div><div class="cell">n</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">l</div><div class="cell">e</div><div class="cell">u</div><div class="cell">r</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">r</div><div class="cell">i</div><div class="cell">s</div><div class="cell">t</div><div class="cell">a</div><div class="cell">l</div><div class="cell cell-space"> </div><div class="cell">g</div><div class="cell">e</div><div class="cell">l</div><div class="cell">é</div><div class="cell">e</div><div class="cell">s</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">e</div><div class="cell">v</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell">d</div><div class="cell">r</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">s</div><div class="cell">é</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">s</div><div class="cell">s</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE HTML>
-<html><head><title>part7</title><link rel="stylesheet" type="text/css" href="/home/julm/work/sourcephile/haskell/worksheets/style/worksheet.css"></head><body>
-<div class="worksheet"><div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">d</div><div class="cell">é</div><div class="cell">s</div><div class="cell">o</div><div class="cell">r</div><div class="cell">m</div><div class="cell">a</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">i</div><div class="cell">e</div><div class="cell">n</div><div class="cell cell-space"> </div><div class="cell">n</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">’</div><div class="cell">a</div><div class="cell">r</div><div class="cell">r</div><div class="cell">ê</div><div class="cell">t</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">i</div><div class="cell">b</div><div class="cell">é</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">é</div><div class="cell">l</div><div class="cell">i</div><div class="cell">v</div><div class="cell">r</div><div class="cell">é</div><div class="cell">e</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">p</div><div class="cell">l</div><div class="cell">u</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">n</div><div class="cell">c</div><div class="cell">e</div><div class="cell">s</div><div class="cell">s</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">a</div><div class="cell">r</div><div class="cell">f</div><div class="cell">a</div><div class="cell">i</div><div class="cell">t</div><div class="cell">e</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">J</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">s</div><div class="cell">u</div><div class="cell">i</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">à</div><div class="cell cell-space"> </div><div class="cell">c</div><div class="cell">o</div><div class="cell">m</div><div class="cell">m</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">j</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">a</div><div class="cell">i</div><div class="cell cell-space"> </div><div class="cell">r</div><div class="cell">ê</div><div class="cell">v</div><div class="cell">é</div><div class="cell">.</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">P</div><div class="cell">e</div><div class="cell">r</div><div class="cell">d</div><div class="cell">u</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">a</div><div class="cell">n</div><div class="cell">s</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">’</div><div class="cell">h</div><div class="cell">i</div><div class="cell">v</div><div class="cell">e</div><div class="cell">r</div><div class="cell">,</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">L</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">f</div><div class="cell">r</div><div class="cell">o</div><div class="cell">i</div><div class="cell">d</div><div class="cell cell-space"> </div><div class="cell">e</div><div class="cell">s</div><div class="cell">t</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">o</div><div class="cell">u</div><div class="cell">r</div><div class="cell cell-space"> </div><div class="cell">m</div><div class="cell">o</div><div class="cell">i</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-<div class="row"><div class="cell">l</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">p</div><div class="cell">r</div><div class="cell">i</div><div class="cell">x</div><div class="cell cell-space"> </div><div class="cell">d</div><div class="cell">e</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">a</div><div class="cell cell-space"> </div><div class="cell">l</div><div class="cell">i</div><div class="cell">b</div><div class="cell">e</div><div class="cell">r</div><div class="cell">t</div><div class="cell">é</div></div>
-<div class="row"><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell cell-space"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div><div class="cell"> </div></div>
-</div></body></html>
\ No newline at end of file
-- PVP: +-+------- breaking API changes
-- | | +----- non-breaking API additions
-- | | | +--- code changes with no API change
-version: 0.0.0.20250503
+version: 0.0.0.20250617
stability: experimental
category: Worksheets
synopsis: Worksheets
tested-with: GHC ==9.6.6
extra-doc-files:
extra-tmp-files:
-data-dir: style
+data-dir: data
source-repository head
type: git
common haskell
default-language: Haskell2010
default-extensions:
+ BangPatterns
BlockArguments
DataKinds
DefaultSignatures
common library-deps
import:
build-depends:
- , base >=4.10 && <5
+ , aeson >=2.1.2.1
+ , anki
+ , array
+ , attoparsec
+ , attoparsec-aeson
+ , base >=4.10 && <5
, blaze-builder
, blaze-html
, blaze-markup
, bytestring
+ , cassava
+ , containers
+ , data-default
+ , direct-sqlite
, filepath
+ , generic-data
+ , ipa
+ , ListZipper
+ , megaparsec
+ , parser-combinators
, pretty-simple
- , text >=2.1
+ , radix-tree
+ , safe-decimal
+ , scientific
+ , split
+ , sqlite-simple
+ , text >=2.1
+ , text-short
, transformers
+ , validity
+ , vector
+
+-- , large-records
+-- , large-generics
+-- , symantic-base
+--, pandoc-types
+--, pandoc
library
import: haskell, library-deps
hs-source-dirs: src
autogen-modules: Paths_worksheets
- exposed-modules: Worksheets.Writing.Latin
- other-modules:
- Paths_worksheets
- Prelude
+ exposed-modules:
+ Graph.DOT
+ Language
+ Language.Chinese
+ Language.Chinese.Pinyin
+ Language.English
+ Language.French
+ Language.Pronunciation
+ Rosetta.Reading
+ Rosetta.Writing
+ Wiktionary
+ Worksheets.Utils.Char
+ Worksheets.Utils.Generics
+ Worksheets.Utils.HTML
+ Worksheets.Utils.IPA
+ Worksheets.Utils.JSON
+ Worksheets.Utils.Paper
+ Worksheets.Utils.Prelude
+ Worksheets.Utils.Probability
+ Worksheets.Utils.SQL
+ Worksheets.Utils.TypeDefault
+ other-modules: Paths_worksheets
build-depends: base >=4.10 && <5
+common anki-deps
+ import:
+ build-depends:
+ , aeson >=2.1.2.1
+ , array
+ , attoparsec
+ , attoparsec-aeson
+ , base >=4.10 && <5
+ , bytestring
+ , containers
+ , direct-sqlite
+ , directory
+ , filepath
+ , ipa
+ , pretty-simple
+ , python-pickle
+ , scientific
+ , sqlite-simple
+ , text >=2.1
+ , text-short
+ , time
+ , transformers
+
+library anki
+ import: haskell, anki-deps
+ hs-source-dirs: libs/anki/src
+ exposed-modules:
+ Anki
+ Anki.Fields
+ Anki.Tables.Cards
+ Anki.Tables.Collections
+ Anki.Tables.Configs
+ Anki.Tables.DeckConfigs
+ Anki.Tables.Decks
+ Anki.Tables.Fields
+ Anki.Tables.Graves
+ Anki.Tables.Notes
+ Anki.Tables.Notetypes
+ Anki.Tables.Profiles
+ Anki.Tables.ReviewLogs
+ Anki.Tables.Tags
+ Anki.Tables.Templates
+ Anki.Utils.Prelude
+ Anki.Utils.SQL
+
test-suite worksheets-tests
- import: haskell, library-deps
+ import: haskell, library-deps, anki-deps
type: exitcode-stdio-1.0
hs-source-dirs: tests
main-is: Spec.hs
ghc-options: -threaded -rtsopts -with-rtsopts=-N
autogen-modules: Paths_worksheets
other-modules:
+ Language.ChineseSpec
+ Language.EnglishSpec
+ Language.FrenchSpec
Paths_worksheets
- Worksheets.Writing.LatinSpec
+ Recipes
+ RecipesSpec
+ Rosetta.ReadingSpec
+ Rosetta.WritingSpec
+ Utils.Pronunciation
+ Utils.Tests
+ WiktionarySpec
build-depends:
, filepath
, genvalidity-sydtest
, genvalidity-text
, genvalidity-time
+ , ipa
, pretty-simple
, relude
, sydtest >=0.19