ืืืื ื ืืฉื ื, ืืขืืืจื ืืฉืืืืฆืจืืช ืืงืื ื Rapperswil, ื ืงืจื ืืืจืืข
ืืืืืช
ืืืืจ ืื ืืืื ืขื ืืื ืฉื ื ืกืืืื ืืื ืฉื ื ื' ืืชืื ืืช "ืืชืืืืงื ืฉืืืืฉืืช ืืืื ืคืืจืืืืงื" ืืืืช ืืกืคืจ ืืืืื ืืืืืื ืฉื ืืื ืืืจืกืืืช ืืืืงืจ ืืืืืืืช - ืกื ื ืคืืจืกืืืจื: ืืกืืื ืืืคืจืื ืืืืืืืืื ืืกืืื ืงื. ืืชืฉืืงื ืืชืื ืืช ืคืื ืงืฆืืื ืื ืขืืืจ ืฉื ืื ื ืืืื ืืกืืจืช ืืจืฆืืืช ืฉื D.N. Moskvin ืืฉื ื ืืฉื ืืื ืืืื ืืืจืกืืื. ืืกืืื ืืฉืชืชืฃ ืืขืช ืืชืืื ืืช Google Summer of Code, ืืืกืืจืชื ืืื ืืืืฉื ืืจืคืื ืืืืืจืืื ืืืกืงื ืืื ืืืืช ืฆืืืช ืืคืจืืืงื
ืคืืจืื ืืืืจืืข
ืงืื ืืืขื ืืื ืืขืืื ืฉื ืคืจืืืงืืื ืืงืื ืคืชืื, ืืชืื ืชืื ืฉืจืืฆืื ืืืฉืชืชืฃ ืืคืืชืื ืฉืืื, ืืืงืจื ืชืื ืืช ืคืื ืงืฆืืื ืื ืืื ืฉืื ืคืฉืื ื ืืืืื ืืืืกืงื. ืืฉื ื, ืืคืชืืื ืืืืชืจ ืืืืืฉืื ืคืจืืืงืืื ืฉื Haskell ืืงืื ืคืชืื ืืื ืจืืื ืืขืืื ืืชืืกืคื ืืืงืื - HSR Hochschule fรผr Technik Rapperswil - ืืื ืืืืจ ืขื ืืืืฆืจืื ืฉืืื ืืืขืืจืจ ืื ืฉืื ืืจืืื ืืืชืขื ืืื ืืคืืชืื ืฉืืื.
ืชืืื ื ืืืืืืืจ
ืืชืื ืืช ืคืฉืืื ืืืื: ืขืืืื ืืืชืื ืืื ืืฆืขืืช ืขื ืืคืจืืืงื ืฉืืื ืืจืืฉ ืืืฉืืื ืืืชื ืืืืจืื ืื, ืฉืืคืจืกืื ืืืืข ืขื ืืคืจืืืงื ืฉืืื ืืขืืื ืืืืจืืข. ืื ืืกืฃ, ืืืื ืืจืืฉืื ืืฉ ืืืืชืื ืืคืจืืืงืืื ืฉืืืฉืื ืฉื ืืืช ืืกืคืจ ืืงืฆืจื ืืืื ืืืืื ืื ืื ืขืืฉืื ืืื ืฆืจืื ืืขืฉืืช. ืืืืจ ืืื ืืชืขื ืืื ืื ืืืคืฉืื ืืช ืืืืืจืื ืืฉืืืืื ืืคืืจืื ืขื ืืืฉืืืืช.
ืขืืืื ืืื ืื ื ืคืจืืืงืืื ืคืชืืืื ืืฉืื ื, ืืื ืื ืื ื ืืืื ืจืืฆืื ืืชืจืื ืืคืจืืืงืืื ืืงืืืืื, ืื ื ืจืฉืื ื ืืืฉืชืชืคืื ืงืืืขืื. ืืืืื ืฉืืืฉื ืืืื ืขืืื ื ืขื ืฉืชื ืงืืืฆืืช ืฉื ืืคืชืืื. ืืกืชืืจ ืฉืืืืื ืืฉืืชืฃ ืฉื ืงืื ืืชืงืฉืืจืช ืืื ืืืคื ืืช ืืืื ืืจืืงืฆืื ืืื ืืืืจื ืืคืจืืืงื ืืชืืจืืื ืืคืจืืืืงืืืื ืืืื - ื-ZuriHac ืืฆืืื ื ืืืืื ืชืืืืื ืฉืืื ืืืฉืื ืื ื ืืืฆืืื ื ืืขืืืจ ืืฉื ื ืฆืืืชืื ืฉืื ืื ืืืืืืื, ืชืื ืืฉืืืช ืืฉืืื ืืืช ืืื ืืื ืืื. ืฉื ืืคืจืืืงืืื.
ืื ืืกืฃ ืืชืจืืื ืจื ืขืจื, ื ืืชื ื ืZuriHac ืื ืืกืคืจ ืืจืฆืืืช ืืืืชืืช ืืื. ืื ื ืืืืจืื ืืืืืื ืฉืชื ืืจืฆืืืช. ืืจืืฉืื ืฉืืื, ืื ืืจืื ืืืงืืื ืืืื ืืืจืกืืืช ื ืืืงืืกื ืืืืจ ืขื ืคืื ืงืฆืืืช ืืคืืืงืืืืืืช ืกืืงืืืืืืช - ืืืืงื ืฉื ืืืคืืกืื ืฉืืืืจืื ืืืคืื ืืืื ืืื ืืื ืคืื ืงืฆืืืช ืืคืืืงืืืืืืช ืืืื ืืืืช. ืืืจืฆืื ืืืจืช, ืืื ืืืืืกืื Haskell, ืกืืืืื ืคืืืืื ื'ืื ืก, ืืืืจ ืขื ืืืืคื ืฉืื ืืกืงื ืืช ืกืื ืขืืื ืืืืืจ GHC.
ืืจืฆืื ืืืช ืกืืืืื ืคืืืืื ื'ืื ืก. ืชืืื ื ืืืืืืืจ
ืืืชืืช ืืืื ืฉืืชืงืืืื ืืืืื ืืืืงืชืื ืืืืงื ืืฉืืืฉ ืงืืืืจืืืช ืืืชืื ืืจืืช ืืืืืื ืฉื ืืืฉืชืชืคืื. ืื ืืืฉืืืืช ืฉืืืฆืขื ืืืฉืชืชืคืื ืฉืืฆืืจืคื ืืคืืชืื ืคืจืืืงืืื ืกืืื ื ืืจืืช ืงืืฉื. ืืงืืืื ืืงืื ื ืื ืืืืืืืชืืช ืฉื ืืชืื ืชืื ืคืื ืงืฆืืื ืืืื ืืืจืืช ืืฉืืื ืืฆืืจืคืื ืืืฉืื ืืฉืืจืืชืื. ืืืื ืืื ืืืืื ืืช ืืืจืฆืืืช ืฉื ืื ืืจืื ืืืืื ืืกืืืืื ืคืืืืื ื'ืื ืก, ืงืืจืก ืืชืื ืืช ืืคืื ืงืฆืืื ืื ืฉืืืื ื ืืืื ืืืจืกืืื ืืื ืืืื ืฉืืืืฉื.
ืืืจืฉืื ืืืืจืืข ืืื ืืืื ื ืื ืืืฉืชืชืคืื ืงืืืขืื ืืื ืืืืชืื ืืคืจืืืงื. ืืืฉื ื ืืงืฉืืช ืืืฉืชืชืคืืช ืืชืืืืช ืืื ื, ืืืืืจ ืืื ืืืขืืจื ื ืืืืืจืืช ืืจืฉืืืช ืืืืชื ื ืืจืฉืืืช ืืืฉืชืชืคืื ืืืืืฉืจืื.
ืืขืืฉืื ื ืืืจ ืขื ืืคืจืืืงืืื ืืคืืชืื ืืื ืืงืื ื ืืืง.
ืคื ืืืง
ืจืฉืืืช ืคืืจืืืื ืฉื ืืกืืืื ืื ืชืืืื ืขื ืืื Pandoc. ืืืชืจ ืืฉ ืื ืืจืฃ ืฉืื, ืืื ืืชืืื ื ืืื ืื ืืชืืืื ืืืชืื.
ืืืืื, Pandoc ืื ืืกืคืงืช ืืืจื ืืฉืืจื ืืื ืืื ืคืืจืืืื. ืืื ืืชืืื ืืืืืื ืื ืจืื ืฉื ืืจื ืกืคืืจืืฆืืืช, ื ืขืฉื ืฉืืืืฉ ืืคืชืจืื ืืจืืืืงืืื ื ืกืื ืืจืื: ืจืืฉืืช, ืืืกืื ืืืื ืืชืืจืื ืืืืฆืื ืืื ืืื ืคื ืืื ืืืืื, ืืืืืจ ืืื ื ืืฆืจ ืืกืื ืืคืืจืื ืฉืื ื ืืืืืฆืื ืืคื ืืื ืืื. ืืืคืชืืื ืืื ืื ืืช ืืืืฆืื ืืคื ืืื "AST", ืืฉืจ ืจืืฉื ืชืืืืช ืฉื Abstract Syntax Tree, ืื
$ cat example.html
<h1>Hello, World!</h1>
$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "Hello,",Space,Str "World!"]]
ืงืืจืืื ืฉืขืืื ืขื Haskell ืืคืืืช ืงืฆืช ืืืืืื ืืืจ ืืื ืื ืืืืืืื ืืงืื ื ืืื ืฉืคื ืืืง ืืชืื ืืืืกืงื: ืืคืื ืฉื ืคืงืืื ืื ืืื ืืืฆืื ืืืจืืืช ืฉื ืืืื ืื ืืคื ืืืืื ืฉื Pandoc, ืฉื ืืฆืจื ืืืืื ืืืืคื ืฉืื ืื ื ืขืฉื ืืืจื ืืื. ื- Haskell, ืืืฉื, ืืกืคืจืืื ืืกืื ืืจืืืช.
ืื, ืืื ืืชื ืืืื ืืจืืืช ืฉืืืืฆืื ืืคื ืืื ืืื ืืื ื ืจืงืืจืกืืื, ืฉืืื ืฆืืืช ืคื ืืื ืืฉ ืจืฉืืื ืฉืื. ืืืืืื, ืืจืื ืืขืืืื ื ืืฉ ืจืฉืืื ืฉื ืืืื ื ืืื - ืืืชืจืช ืืจืื ืืจืืฉืื ื ืขื ืืชืืื ืืช "hello-world",[],[]. ืืชืื ืืืชืจืช ืื ืืืกืชืจืช ืจืฉืืื ืฉื ืืืืจืืืช "Hello", ืืืืจืื ืจืืื ืืืืืจืืืช "World!"
ืืคื ืฉืืชื ืืืื ืืจืืืช, ืืืืฆืื ืืคื ืืื ืืื ื ืฉืื ื ืืืจืื ื-HTML. ืืื ืขืฅ ืฉืื ืื ืฆืืืช ืคื ืืื ืืกืคืง ืืืืข ืขื ืืขืืฆืื ืฉื ืฆืืฆืืื, ืืืขืืื ืืืืืื ืืช ืืชืืื ืืืืืชื ืฉื ืืืกืื.
ืื ื ืจื ืืจืืช ืืืืฉืื, ืกืื ืื ืชืื ืื ืฉื ืืืกืื ืืืื ืืืืืจ ืื:
data Pandoc = Pandoc Meta [Block]
ืืื ืืืืง ืืื ืืืืืง ืืงืืืงืืืื ืืคื ืืืืื ืฉืืืืืจื ืืขืื, ืืืื ืืื ืืื-ืืื ืคืืจืืฆืื ืขื ืืืกืื, ืืืื ืืืชืจืช, ืชืืจืื ืืฆืืจื, ืืืืจืื - ืื ืฉืื ื ืขืืืจ ืคืืจืืืื ืฉืื ืื, ืืคื ืืืง ืื ืกื, ืื ืืคืฉืจ, ืืฉืืจ ืืืืข ืืื ืืขืช ืชืจืืื ืืคืืจืื ื ืคืึผืจืึธื.
ืืืขื ืื ืืื ืืื ืืกืื Block - ืืืฉื Header ืื Para (ืคืืกืงื) - ืืืงืืื ืชืืื ืืช ืืจืฉืืืช ืงืืืงืืืื ืืจืื ื ืืืื ืืืชืจ ืืืจืืืื ืืื - Inline, ืืืื. ืืืืืื, Space ืื Str ืื ืื ืืื ืืกืื Inline, ืืื ืชื ื-HTML ืืืคื ื-Inline ืืืืืื ืฉืื. ืืื ื ื ืจืืืื ืืขื ืืกืคืง ืืืืจื ืืืื ืฉื ืืกืืืื ืืืื, ืื ืฉืืื ืื ืฉื ืืชื ืืืฆืื ืืืชื ืืื
ืืขื ืืื, ืืกืื Pandoc ืืื ืืื ืืืื. ืื ืืืืจ ืฉืืฉ ืกืื ืฉื ืืกืื ืจืืง, ืืฉืืคืฉืจ ืืขืจืื ืืกืืืื ืืื. ืื ื ืื ืืฉืืืืฉ ืืขืช ืืชืืืช Readers - ื ืืชื ืืคืจืง ืืกืื ืืืืงืื ืืืืฆืขืืช ืืืืืงื ืฉืจืืจืืชืืช, ืื ืชื ืื ืืื ืื ืคืจื, ืืื ืืืืจ ืืื ืืืกืื ืืื. ืืืงืจื ืื, ืืื-ืืืืข ืืืืกืฃ ืืื ืืืงื ืืืกืื ืืืช ืืืช.
ืืขืช ืืืจื, ื ื ืื, ื-LaTeX ื-HTML, ืชืืืื ืืืืื ืืืืื ืืฉื LaTeXReader ืืืืจ ืืช ืืกืื ืืงืื ื-AST, ืืื ืืืืื ืืืจ ืืฉื HTMLWriter ืืืืจ ืืช ื-AST ื-HTML. ืืืืืช ืืืจืืืืงืืืจื ืื, ืืื ืฆืืจื ืืืชืื ืืกืคืจ ืจืืืืขื ืฉื ืืืจืืช - ืืกืคืืง ืืืชืื Reader ื-Writer ืขืืืจ ืื ืคืืจืื ืืืฉ, ืืื ืืืืืช ืืืืจืืช ืืืคืฉืจืืื ืืชืืื ืืืืคื ืืืืืืื.
ืืจืืจ ืฉืื ืืืจืืืืงืืืจื ืืื ืืฉ ืืช ืืืกืจืื ืืช ืฉืื, ืฉืืื ืื ืืืืจ ืขื ืืื ืืืืืื ืืชืืื ืืจืืืืงืืืจืช ืืชืืื ื. ืืืฉืืขืืชืืช ืืืืชืจ ืืื ืขืืืช ืืืฆืืข ืฉืื ืืืื ืืขืฅ ืืชืืืืจ. ืื ืืฉืื ืื ืจืฆืื ื ืืกืคืืง, ืชืฆืืจื ืืฉื ืืช ืืช ืืงืื ืืื ืืงืืจืืื ืืืืืชืืื. ืืืืืื, ืืื ืืืชืืจืื ืืขืืืืื ืืคื ื ืืคืชืื Pandoc ืืื ืชืืืื ืืคืืจืืืื ืืืจืืืื ืฉื ืืืืืืช. ืืขืช Pandoc ืืืืื ืืืฆืืจ ืจืง ืืืืืืช ืคืฉืืืืช ืืืื, ืขื ืืืชืจืช, ืขืืืืืช ืืขืจื ืืื ืชื. ืืืืืื, ืคืฉืื ืชืชืขืื ืืชืืื ืช colspan ื-HTML. ืืืช ืืกืืืืช ืืืชื ืืืืช ืื ืืื ืืืขืืจ ืกืืื ืืืืืืช ืืืืฆืื ืืืืืืช ืืื ืืคืืจืืืื ืื ืืคืืืช ืจืืื - ืืืชืื, ืื ืืจืืจ ืืืืื ืฆืืจื ืืฉ ืืืืกื ืืช ืืืืืืืช ืืืืฆืื ืืคื ืืื. ืืื ืื ืืืืจ ืืืืจืช ืชืฆืืื ืกืคืฆืืคืืช, ืชืฆืืจื ืืฉื ืืช ืืืืืืื ืืช ืื ืืงืืจืืื ืืืืืชืืื ืืชืืืืื ืืขืืืื ืขื ืืืืืืช.
ืฉืคืช Haskell ื ืืืจื ืื ืจืง ืืืื ืืืืื ืืืืืื ืฉื ืืืืืจืื ืืชืื ืืช ืคืื ืงืฆืืื ืื. Haskell ืืืืขื ืืืืืืืช ืขืืืื ืืืงืกื ืื ืจืืืืช ืฉืื. ืืืืื ืืืช ืืื ืืกืคืจืืื
ืืชืืืจ ืืงืฆืจื, ืืื ืืืืช ืืฉืืฉืืช ืื ืืชืื ืจืฆืืฃ, ืืืฉืจ ืืืจ ืืื ืื ืงืืื, ืืืืจ ืื ืืืจ. ืืืืืื, ืืืืืื ืื:
whileParser :: Parser Stmt
whileParser = whiteSpace >> statement
ืงืืื ืฆืจืื ืืกืคืืจ ืืช ืืจืืื, ืืืืจ ืื ืืช ืืืฆืืจื - ืฉืื ืื ืืฉ ืืช ืกืื Parser Stmt.
ืืฉืชืืฉืื ืืคืื ืงืืืจืื ืืืืคืืื ืืืืจื ืืืืืจ ืื ืื ืืชืื ื ืืฉื. ืืืืืื,
statement :: Parser Stmt
statement = parens statement <|> sequenceOfStmt
ืื ืืืืจ ืฉืืชื ืฆืจืื ืื ืกืืช ืืงืจืื ืืช ืืืฆืืจื ืืกืืืจืืื, ืื ืื ืกืืช ืืงืจืื ืืื ืืฉืคืืื ืืจืฆืฃ.
ืคืื ืงืฆืืืช ืืคืืืงืืืืืืช ืืฉืืฉืืช ืืขืืงืจ ืืงืืฆืืจื ืืจื ืขืืืจ ืืื ืืืช. ืืืืืื, ืชื ืืคืื ืงืฆืื tok ืืงืจืื ืืกืืืื ืืืฉืื (ืืืื ืคืื ืงืฆืื ืืืืชืืช ื-LaTeXReader). ืืืื ื ืกืชืื ืขื ืืฉืืืื ืืื
const <$> tok <*> tok
ืื ืืงืจื ืฉื ื ืืกืืืื ืื ืืจืฆืฃ ืืืืืืจ ืืช ืืจืืฉืื.
ืืื ืืฉืืขืืจืื ืืืื, ื-Haskell ืืฉ ืืืคืจืืืจืื ืกืืืืื ืืคืื, ืื ืฉืืืจื ืืชืื ืืช Reader ืืืืจืืืช ืืื ืืื ืืช ASCII. ืคืฉืื ืชืชืคืขื ืืืงืื ืื ืคืื ืืื.
ืืืฉืืืืช ืฉืื ื ืืื ืงืฉืืจืืช ื-LaTeXReader. ืืืฉืืื ืฉื Vasily ืืืืชื ืืชืืื ืืคืงืืืืช mbox ื-hbox, ืฉืืืืฉืืืช ืืืชืืืช ืืืืืืช ื-LaTeX. ืืืืืืช ืืืืชื ืืืจืืืช ืืชืืืื ืืคืงืืืช ืืืคืืืจืฃ, ืืืืคืฉืจืช ืืืฆืืจ ืืคืืืจืฃ ืืืกืืื LaTeX.
Hatrace
ืืขืจืืืช ืืคืขืื ืืืืืืช UNIX ืืืืฉืืืช ืืจืื ืืช ืงืจืืืช ืืขืจืืช ptrace. ืื ืฉืืืืฉื ืืืืชืืจ ืืืืื ืืืกืืืืืฆืื ืฉื ืกืืืืืช ืชืืื ืืืช, ืืืืคืฉืจ ืื ืืืชืืงืืช ืืืจ ืงืจืืืืช ืืืขืจืืช ืฉืืชืืื ืืช ืืืฆืขืช. ืืืืืื, ืืื ืืฉืืจืืช ื-strace ืืฉืืืืฉื ืืืื ืืฉืชืืฉ ื-ptrace ืืืืคื ืคื ืืื.
Hatrace ืืื ืกืคืจืืื ืืืกืคืงืช ืืืฉืง ื-ptrace ื- Haskell. ืืขืืืื ืืื ืฉ-ptrace ืขืฆืื ืืื ืืืื ืืชืืืื ืืื ืงืฉื ืืืฉืชืืฉ ืื ืืฉืืจืืช, ืืืืืื ืืฉืคืืช ืคืื ืงืฆืืื ืืืืช.
Hatrace ืืชื ืืืช ืืื ืกืืจืืก ืืืคืขืื ืืืงืืืช ืืืขืื ืื ืืืืื. ืืื ืฉืื ื ื-strace ืืื ืฉืืื ืื ืกืคืจืืื ืืืกืคืงืช ืืืฉืง ืคืฉืื ืืืชืจ ืืืฉืจ ืจืง ptrace.
ืืขืืจืช hatrace, ืืืจ ืชืคืกื ื ืืื ืืื ืื ื ืขืื ืืืืืจ GHC Haskell - ื ืืจื ืืจืืข ืืื ื ืืื, ืืื ืืืฆืจ ืงืืฆื ืืืืืืงืืื ืฉืืืืื ืืืื ื ืืจืืื ืืืชื ืืืืฉ ืืขืช ืืคืขืื ืืืืฉ. ืกืงืจืืคืืื ืขื ืืื ืงืจืืืืช ืืขืจืืช ืืคืฉืจื ืืฉืืืจ ืืฆืืจื ืืืืื ื ืืช ืืฉืืืื ืืจืืฆื ืืืช, ืืขืื ืฉืืจื ืืงืจืื ืฉืืืืจ ืืช ืืฉืืืื ืชืื ืืฉืขืชืืื.
ืืืกืคื ื ืืืฉืงื ืฉืืืืช ืืขืจืืช ืืกืคืจืืื - Elizaveta ืืืกืืคื brk, ืืืกืืื ืืืกืืคื mmap. ืืืชืืกืก ืขื ืชืืฆืืืช ืืขืืืื ืฉืื ื, ื ืืชื ืืืฉืชืืฉ ืืฆืืจื ืคืฉืืื ืืืืืืงืช ืืืชืจ ืืืืขืื ืื ืฉื ืงืจืืืืช ืืขืจืืช ืืื ืืขืช ืืฉืืืืฉ ืืกืคืจืืื.
ืืงืืจ: www.habr.com