構文解析器
Alex / Happy
- Alex and Happy: Parsing comments and strings
- Happyでパースエラーで列行番号とどんなミスマッチが起こったか報告する - Qiita
- blog <| code - Alex by example (Write You A Python Lexer)
パーサーコンビネータ
type Parser = StateT String []
-- type Parser = StateT String Maybe
-- type Parser = StateT String (Either Error)
parse = evalStateT
- The parsec package
- [ANN] binary-parsers 0.1.0.0
- The parsers package
- モナディック・パーサー
- 構文解析器結合子
- Monadic Parsing in Haskell
- Revisiting ‘Monadic Parsing in Haskell’ - Vaibhav Sagar
- Applicative Functors for Fun and Parsing – Arun Raghavan
- Showcasing Applicative – Blog – Joachim Breitner’s Homepage
- Pandoc - a universal document converter
- Erasing “expected” messages in Parsec
- bound
- Two kinds of backtracking
- 8章:関数型パーサ
- Simple Monadic Parser in Haskell
- Packrat Parsing: Simple, Powerful, Lazy, Linear Time
- Efficient parsing of large text files, part1 part2 part3 part4
- High-performance Log Parsing in Haskell: Part Two
- Parser Combinators: Parsing for Haskell Beginners
- What’s in a parser combinator?
- OpenFlowの可変長フィールドをAttoparsecで解析する
- Parser Combinators
- えっ!? 1時間でオリジナルのプログラミング言語の開発を構文解析から!?
- quickdudley/phaser
- Left-recursive parsing of Haskell imports and declarations
- Package takeover: indents
- Modular parser combinators - Coq en Stock
- Monoidal Parsing—Edward Kmett
- パーサー結合子:ハスケル初心者のための解析
- Parsing list comprehensions is hard
- 「正規表現はあんまり使わないかな。パーサー使うから」っていう人の気持ちがわかった! - Qiita
- 【Haskell】Persistentをstack installするときに発生するエラー対処。>=0.9.0 is required but it could not be found. - Qiita
- The round-trip property
- Parser Combinators: a Walkthrough
- IPFS on Hackage
- Implementing Co, a Small Interpreted Language With Coroutines #1: The Parser | abhinavsarkar.net
- Parsers and Builders as Prisms
- Elegant AST Parsing and Building with Prisms
- Haskellのsomeを正格評価したら無限ループする話 - 星にゃーんの日記帳
- Parser Combinators in Haskell
attoparsec
Megaparsec
- Megaparsec
- Megaparsec 4 and 5
- Megaparsec tutorial from IH book
- Megaparsec 8
- jamesdbrock/replace-megaparsec: Stream editing with Haskell Megaparsec parsers
Terifecta
Language
- Hackage Search: language
- haskell-src-exts
- language-javascript
- language-python
- mchakravarty/language-swift-quote
- vincenthz/language-java
- language-rust: Parsing and pretty printing of Rust code
- language-c: Analysis and generation of C code
ファイルフォーマット
バイナリ
- Haskellでバイナリをパースする その1(たぶん続かない)
- Yuras/scanner: Fast non-backtracking incremental combinator parsing for bytestrings
CSV
- ベンチマーク
- https://github.com/haskell-perf/csv
- cassava
- sv: Encode and decode separated values (CSV, PSV, …)
- readcsv: Lightweight CSV parser/emitter based on ReadP
- Oleg’s gists - Fancy types for CSV library
- ChrisPenner/lens-csv: Lensy interface for parsing CSV’s
- HaskellでData.Csv(cassava)を使ってcsvファイルを処理する - Qiita
XML
- xml-conduit
- The hxt package
- New XML Parser, Hexml
- ocramz/xeno: Fast Haskell XML parser
- 4e6/haskell-perf-xml - Simple benchmarks for XML parsing libraries
HTML
Excel
YAML
RDF
Markdown
Dhall
- Dhallによるリッチな設定ファイル体験
- Dhall で Kubernetes の YAML 管理をスマートにやっていく - ryota-ka’s blog
- Bowl Full of Lentils
- Dhall to HLint: Using Dhall to generate HLint rules
- HaskellでDhallをExtensibleのレコードとして読み込めるようにする - Qiita
- Dhall: Haskellの新たなキラーアプリ - Speaker Deck
- Dhall を試して物足りない部分を補うツールを自作した
- Haskell for all: Dhall - Year in review (2018-2019)
- Haskell for all: Dhall Survey Results (2019-2019)
JSON
- HaskellとJSON、そしてレコード型
- aeson
- aeson-schema
- informatikr/aeson-pretty
- hdgarrood/aeson-better-errors
- The aeson-yak package
- lens-aeson
- mgajda/json-autotype
- JSON Autotype 1.0 - Haskell SG
- HaskellでのJSONパースがこんなに簡単だったとは
- 24 days of Hackage, 2015: day 12: json-autotype: inferring types from data
- 03 Parsing JSON and catching exceptions
- Stricter JSON parsing with Haskell and Aeson – Arun Raghavan
- crjdt-haskell Haskell package - Data | LibHunt
- Playing with lens-aeson
- Migrating JSON with lens and foci :: Capital Match Tech Blog
- ParsecでJSONパーサの作成 - Qiita
- Type-driven safe derivation of ToJSON and FromJSON, using DerivingVia in GHC 8.6 and some type-level hacks
- Queensland FP Lab - Waargonaut The JSONer
- Aeson’s mysterious lazy parsing | Winter’s Land
- obsidiansystems/aeson-gadt-th: Template Haskell for generating ToJSON and FromJSON instances for GADTs
- Vlix/safe-json: Automatic versioning of JSON formats for Haskell data types (with backwards compatibility)
- aeson-schemas: Easily consume JSON data on-demand with type-safety
- Typeable Blog - JSON parser performance optimization, the slow path trick
- JSON Parsing from Scratch in Haskell | abhinavsarkar.net
- Generalizing ‘jq’ and Traversal Systems using optics and standard monads
- JSON Parsing from Scratch in Haskell: Error Reporting | abhinavsarkar.net
- CS SYD - JSON Vulnerability in Haskell’s Aeson library
Others
- github/semantic: Parsing, analyzing, and comparing source code across many languages
- Parsing and generating ABIF files (DNA chromatograms)
- Philip Cunningham - Parse Ruby Objects in Haskell
- Email message parsing in Haskell in 2018
形式言語
微分
- Well-Typed - The Haskell Consultants: Fix-ing regular expressions
- Parsing with Derivatives - A Functional Pearl
- Regular-expression derivatives reexamined
- [1010.5023] Yacc is dead
- Yacc is dead: An update
正規表現
- A tale of backwards compatibility in ASTs
- 関数型的正規表現マッチ
- 24 days of Hackage, 2015: day 2: Regexes with pcre-heavy; standalone Haskell scripts using Stack
- lens-regex で正規表現を便利に
- Haskellで簡単な正規表現を実装した【KMCアドベントカレンダー8日目】
- A Play on Regular Expressions
- Differentiating Regular Expressions
- Partial Derivatives of Regular Expressions
- Regex Edit Distance
- Fast, Elegant Regexes in Haskell
- 2016 11 24 - Herrmann - Compiling a Simple language to LLVM
- IRIS Connect Engineers’ Blog - regex: A Toolkit for regex-base
- Regular Expressions of Types – Oleg Grenrus - SmallFP 2018-09-13 : haskell
- Applicative Regular Expressions using the Free Alternative · in Code
- ChrisPenner/lens-regex-pcre: Text lenses using PCRE regexes
- Locally Nameless :: Callan McGill
- Things that amuse me
- regex-applicative: 内部DSLとしての正規表現(ブログ記事版) - Haskell-jp
- Well-Typed - The Haskell Consultants: Fix-ing regular expressions
Others
- 『形式意味論入門』を Haskell に書き下す (前編) - ryota-ka’s blog
- 『形式意味論入門』を Haskell に書き下す (後編) - ryota-ka’s blog
- ollef/Earley: Parsing all context-free grammars using Earley’s algorithm in Haskell.
- Wouter Swierstra, なぜ属性文法は重要か(原題:Why Attribute Grammars Matter) - Pac Learner
インタプリタ/コンパイラ
- CSCI 360: Programming Languages (Fall 2016)
- Go言語でつくるインタプリタを Haskell で書く - Qiita
- Micro C, Part 1: Parsing – Joseph Morag
- λm.me - Compiling Lisp to JavaScript From Scratch in 350 LOC
- A tiny computer for Tiny BASIC (17 November 2020)
- lambda is not a four letter word - Implementing a Functional Language with Graph Reduction
Lisp / Scheme
- Learn Functional Programming by writing a Scheme in Haskell :: 0x0f0f0f
- 48時間でSchemeを書こう - Wikibooks
- Write You A Scheme, Version 2
- 24 days of Hackage, 2015: day 10: s-cargot: using S-expression syntax · Franklin Chen
- 素朴なlispインタープリター - Qiita
- 簡易LISP処理系の実装例(Haskell版) - Qiita
LLVM
Haskell
- Write You a Haskell ( Stephen Diehl )
- Haskell コンパイラを書こう!
- The Implementation of Functional Programming Languages - Microsoft Research
- (Haskell in Haskell) 0. Introduction - Cronokirby
- (Haskell in Haskell) 1. Setup - Cronokirby
- (Haskell in Haskell) 2. Lexing - Cronokirby
- cronokirby/haskell-in-haskell: Trying to write an understandable implementation of Haskell, in Haskell
AST/実装テクニック
- Kwang’s Haskell Blog - Write you an interpreter
- jaspervdj - Tries and elegant Scope Checking
- osa1 - Knot-tying: why and how (and my opinions on it)
- A tale of backwards compatibility in ASTs : Inside 245-5D
- Functorial Blog - Higher-order Abstract Syntax for Cartesian Closed Categories
- Kwang’s Haskell Blog - Continuation Passing Style Interpreter
- 僕の考えたさいきょうの抽象構文木データ型 - autotaker’s blog
- /usr/sbin - Symbolic Execution: Intuition and Implementation
-
[Query-based compiler architectures Olle Fredriksson’s blog](https://ollef.github.io/blog/posts/query-based-compilers.html)