データ構造とアルゴリズム
- Haskell Skyline
- 巡回冗長検査(CRC-32)のHaskellでの実装
- Solving the GCHQ puzzle “by hand”
- Moore for Less
- Transducers: Why and How?
- lotz84/transducer-survey.md
- Löb and möb: strange loops in Haskell
- Löb with error handling
- Rubik’s cube combinations
- ナップザック問題をHaskellで解いてみる
- Adventures in enumerating balanced brackets
- たくさんのファイルから重複した行の塊を見つける
- Rotating Squares
- Simple RNA folding in 130 lines of Haskell - SAOWEN
- Nicolas Mattia
- 関数プログラミングの気分(『多段階選抜』問題を題材にして) - Qiita
- Vladimir Slepnev: A puzzle about game review scoring in Haskell
- To Void or to void
- The Partial Options Monoid – Jonathan Fischoff – Medium
- 帰納関数プログラミングシステム MagicHaskeller
- Less parentheses
- Haskell で Simpath を実装してみる - Qiita
- フリーランスプログラマのための複式簿記プログラミング - Qiita
- Mixing Supercompilers and Recursion Using Elgot Algebras
- Java interfaces map to Haskell records
- Finite-State Machines, Part 1: Modeling with Haskell Data Types
- Finite-State Machines, Part 2: Explicit Typed State Transitions
- 探索問題を Haskell で解く - Qiita
- 区間代数と無限小と無限大 - Qiita
- 部分構造の共有を観測するdata-reify - Qiita
- Fast and Parallel State Machines by Gabriel Gonzalez : haskell
-
[Fast Sudoku Solver in Haskell #1: A Simple Solution abhinavsarkar.net](https://abhinavsarkar.net/posts/fast-sudoku-solver-in-haskell-1/) - Fast Sudoku Solver in Haskell #2: A 200x Faster Solution
- Edward Kmett - Revisiting Combinators (“upgrade your video driver to type check”) : haskell
- Lamping’s Abstract Algorithm
- What the heck is Typeable !?
- だれも Data.Maybe を教えてくれなかった - Qiita
- A Very Simple Prime Sieve in Haskell - Donnacha Oisín Kidney
- HaskellでDammアルゴリズムを実装する - Qiita
- Solving Planning Problems with Fast Downward and Haskell
- Do disturb me | The Essence of Datalog
- 郵便番号データのつくりかた - Qiita
- 合成数列の和 in Haskell - Qiita
- Elias-Fano encoding: 単調増加する数列をほぼ簡潔に表現する - モナドとわたしとコモナド
- A Binomial Urn - Donnacha Oisín Kidney
- Haskellで10桁のISBNを13桁に変換する - Qiita
- ポインタを使ったデータ構造をHaskellの代数的データ型と相互変換したい | Aqueos Sodium Hydroxide
- AtCoderの入力処理コードを自動生成してみた - Qiita
- Bodigrim/poly
- 動的計画法を実現する代数〜トロピカル演算でグラフの最短経路を計算する〜 - Qiita
- カタンの最長交易路(Longest Road)を探すために半環を考える - Qiita
- Exploratory Haskell
- ChrisPenner/astar-monad: A smart A* search monad transformer which supports backtracking user-state!
- jaspervdj - Partial application using flip
- 200行のHaskellでテトリス - Qiita
- Qnikst blog - Runtime based caching
- Lazy Constructive Numbers and the Stern-Brocot Tree - Donnacha Oisín Kidney
- Knuth-Morris-PrattアルゴリズムのHaskellでの実装の解説 - Qiita
- ズンドコ手続型 Haskell - TIM Labs
- 箱玉系(ソリトン Cellular Automaton) - Qiita
- 単価が異なるお菓子をどういう組み合わせで買えば目標の合計値になるか問題 - Qiita
- (なるべく)HaskellでAtCoderに参加したい(自動提出等) - Qiita
- Xorshiftを移植してみた - Qiita
- Optimizing a maze with graph theory, genetic algorithms, and Haskell
- 正則連分数を用いたモジュラ逆数の計算 - Qiita
- Haskellの再帰実装のフィボナッチもLRUキャッシュを使えば一瞬で計算できて省メモリになる - nwtgck / Ryo Ota
- i-am-tom/holmes: A reference library for constraint-solving with propagators and CDCL.
- 深さ優先探索で数独を解く - Qiita
- foldrでナップザックDP - Qiita
- Haskell for all: Blazing fast Fibonacci numbers using Monoids
- Monoidal Puzzle Solving
- Dynamic Dispatch in Haskell, or: How Can I Make My Code Extendable?
- Haskell for all: Record constructors
- The Halting Problem (part 1)
- HGeometry
- Cast Haskell values with Witch · taylor.fausak.me
Hackage
- The grid package
- ekmett/ersatz
- zstd: Haskell bindings to the Zstandard compression algorithm
- Haskell containers package — containers 0.5.10.2 documentation
- unpacked-containers: Unpacked containers via backpack
- naqsha Alternatives - Geospatial | LibHunt
純粋関数型データ構造
- 純粋関数型データ構造(英語版PDF)
- Part 1: Leonardo Random Access Lists - School of Haskell | School of Haskell
- Part 2: Open-Ended Fibonacci Search - School of Haskell | School of Haskell
セルオートマトン
ソート
- Haskellクイックソート計測大会2016
- Descending sort in Haskell
- vectorを使ったData.List.sortより4倍速いsortアルゴリズムの実装 - autotaker’s blog
- Permutations By Sorting - Donnacha Oisín Kidney
- sortByMを実装して、ぼくの好きなお酒ランキングを作る - Qiita
- O(n)時間でソートが終了するバケットソートをHaskellで実装する (1) - Qiita
- O(n)時間でソートが完了するバケットソートをHaskellで実装する (2) - Qiita
- Approaching Heapsort via Lazy Mergesort - HackMD
Queue
- bttr/psqueues
- Efficient Amortised and Real-Time Queues in Haskell
- Queueing and Glueing for Optimal Partitioning
- 永続リアルタイムキューのHaskell実装と計算量解析 - autotaker’s blog
代数構造
- The magma package
- 24 days of Hackage, 2015: day 7: semigroups; NonEmpty list and a case study of types and tests
- You know more about presheaves than you think
- Haskellでわかる群論の代数的構造
- avieth/Algebraic
- Subtractable values are torsors
- 有理数とか有限体とかのはなし
- Realtime collaborative editor. Algebraic properties of the problem.
- Algebraic blindness
- Haskellで「ひらけ!ポンキッキ」 (文字列の回転) - Qiita
- Haskell上で有限体を使って遊ぶ - Qiita
- Haskellの代数的構造入門 半群・モノイド・環とは何か? - ログミーTech
- Haskellerのためのモノイド完全ガイド | 雑記帳
- argumatronic - A Brief Guide to A Few Algebraic Structures
- acts: Semigroup actions, groups, and torsors.
- Shuffling things up: Applying Group Theory in Advent of Code · in Code
バイナリ
- The binary package
- Better, faster binary serialization
- Fast way to serialize Haskell objects
- jberthold/packman
- デシリアライザとスキーマ
- Efficient binary serialization
- Austin Seipp - binary-serialize-cbor
- store: a new and efficient binary serialization library
- weigh: Measuring allocations in Haskell
- The arithmoi package
- The Random Access Zipper: Simple, Purely-Functional Sequences
- Encoding arbitrary precision integers in binary
- Well-Typed - The Haskell Consultants: Binary instances for GADTs
(or: RTTI in Haskell) - mightybyte/armor: Protect against backwards-incompatible serializations
- fumieval/winery: Compact and sustainable serialisation format
- Haskell Works Blog - Data-Parallel Rank-Select Bit-String construction
- Haskellで、バイナリ表現の値を手軽に処理する - Qiita
- 特級シリアライズライブラリ、winery 1.0解禁 - モナドとわたしとコモナド
- bitvec: Unboxed bit vectors
- i-am-tom/higgledy - Higher-kinded data via generics
- Insane in the Membrain
数値
- Lazy unary numbers
- backprop: Heterogeneous, type-safe automatic backpropagation in Haskell
- 理想の浮動小数点数である「浜田のURR」を理解する - Qiita
- 拡張されたユークリッドの互除法
- 「Haskell」で「Look and Say 数列」を生成してみた
- Constant-time Binary Logarithm
- カタラン数は語る(Haskell で Catalan数的組み合わせを生成する関数) - Qiita
- Decimal Safety Right on The Money
- カプレカ数で遊ぶ - Qiita
- Capturing Number Theory in Haskell – bor0’s blog
- Continued Fractions: Haskell, Equational Reasoning, Property Testing, and Rewrite Rules in Action | by Chris Smith | Apr, 2021 | Medium
- [1807.11792] Computing Integer Sequences: Filtering vs Generation (Functional Pearl)
- Haskellで自然数から整数を構成する - 置き去りになったメモ
実数
- Exact Real Arithmetic in Haskell
- [cs/0605058] A Monadic, Functional Implementation of Real Numbers
- [1904.12763] Logic for exact real arithmetic
文字列
- Haskell String Types
- bytestring
- The utf8-string package
- nikita-volkov/bytestring-builders-benchmark
- A guided tour through the bytestring library
- bytestring-lexing
- Making ByteString and Text instances of Foldable… almost
- 詳解bytestring
- lzma
- lzma-streams
- buffer-builder
- The bytestring-tree-builder package
- Haskell 文字列変換入門
- The securemem package
- Abusing -XOverloadedStrings to Implement Type Directed Parsing
- Why is the F# version of this program 6x faster than the Haskell one?
- A Sticky Stringy Quandary
- chrisdone/path
- Haskellで文字列っぽい型同士を結合する演算子が欲しい。その1(未解決)
- Haskellで文字列っぽい型同士を結合する演算子が欲しい。その2(動作するところまでは行った)
- Haskellで文字列っぽい型同士を結合する演算子が欲しい。その3(動作するが改善の余地結構有り)
- The Base of a String Theory for Haskell
- iconv-typed: An experiment in API design and type safety
- String Types
- Sorting Secret - Computerphile
- agrafix/superbuffer - Haskell: Efficiently build a bytestring from smaller chunks
- String_random.jsをHaskellへ移植した
- Haskellで高階関数を組み合わせて部分文字列を作る例が全然わからなかったから考えた
- Safer paths, part 1 - valid and typed paths
- Safer paths, part 2 - Stop, Reconsider, Contribute
- heredocsの紹介
- Decomposing a string into its elements
- Advent of code #16 solution: an algebra of bitstrings | blog :: Brent -> [String]
- aelve/fmt: New formatting library
- Migrating text metrics to pure Haskell
- A ByteString performance mystery
- Haskell の (文字列) 変換パッケージ (convertible, convert, conversion) - Qiita
- Short ByteString and Text
- Haskell で yes コマンドを実装した - Qiita
- Haskell Works Blog - Rechunking lazy bytestrings
- パッケージnowdocの紹介 - Qiita
- Strings – Haskell – Aelve Guide
- 文字列と自然数の全単射を構成する - Qiita
- Channable - How we made Haskell search strings as fast as Rust
- String interpolation and overlapping instances 101 | William Yao
- ふみさんはTwitterを使っています: 「Haskellの文字列関連の型をまとめた(修正版) https://t.co/ASfyX1ulAV」 / Twitter
- だめぽラボ@技術書典7 し03DさんはTwitterを使っています: 「自分が類似の図を作るなら、「バイト文字列」と「Unicode文字列」で区画を分けてしまうかな。区画をまたぐにはエンコーディングとか変換失敗とかも考慮しないといけない、的な話もあるし https://t.co/ZvcpQHo87E」 / Twitter
- Haskellの文字列型:分類と特徴 - Qiita
- Haskellの文字列型:変換時の心構えと変換方法まとめ - Qiita
- Eat Haskell String Types for Breakfast
- Haskell の Text と ByteString - Qiita
- Channable - Bottlenecked on Haskell’s text library
- beauty and the bytestring - Norman Liu’s blog
- adventures in uncertainty: Ode to a Streaming ByteString
集合
リスト
- Haskell Data.Listのリスト操作関数(サンプル付き) - Qiita
- Haskellで無限個の無限リストをソートされた形で結合する
- Haskellで直角三角形のタプルをつくる
- リストの中から重複する項目の数をカウントする
- 【Haskell】リストをシャッフルする関数
- Re: リストをシャッフルする関数
- リストの中から重複する項目の数をカウントする
- パズル「カードの三角形」を内包表記で解く
- Difference Lists and the Codensity Monad
- List and Comprehension Extensions
- phadej/dlist-nonempty - Non-empty difference lists
- subsequencesを紐解く - Qiita
- When You Should Use Lists in Haskell (Mostly, You Should Not)
- いつからHaskellの5行クイックソートが遅いと錯覚していた? - Qiita
- Monadic List Functions - Donnacha Oisín Kidney
- groupBy - Donnacha Oisín Kidney
- My favorite Haskell function
- What does this list permutations implementation in Haskell exactly do?
- Adler-32: 関数scanlを使ってみる - Qiita
- spanの小ネタ(使い方編) - Qiita
- spanの小ネタ(再帰パターン編) - Qiita
- spanの小ネタ(変奏編) - Qiita
- The nested-sequence package
- Haskell 順列・組み合わせ - Qiita
- Worstsort | blog :: Brent -> [String]
- vrom911/slist: ♾️ Sized list
- Haskell のリストを左結合で連結すると効率が悪い理由 - Qiita
- Haskellのscan系関数を使いこなす | 雑記帳
- FUNCTIONAL PEARLS Heterogeneous binary random-access lists WOUTER SWIERSTRA
- jaspervdj - Lazy Sort: Counting Comparisons
- A law-breaking hack
array/vector
- The vector package
- The array package
- すごい配列楽しく学ぼう
- Open Data Types and Open Functions
- leventov/yarr
- Haskell, Vectors, and Implicit Knowledge
- fhaust/vector-split
- 【Haskell】様々な配列その1
- 【Haskell】様々な配列その2
- The vector-builder package
- vector-algorithms: Efficient algorithms for vector arrays
- 24 days of Hackage, 2015: day 18: vector, vector-algorithms: unleash your inner C programmer!
- The Theory of patches-vector
- generateの罠 - モナドとわたしとコモナド
- Tweag I/O - Immutability and unboxing in array programming
- Tweag I/O - Array fusion with vector
-
[Unlifted Structures - School of Haskell School of Haskell](https://www.schoolofhaskell.com/user/edwardk/unlifted-structures) - unboxing-vectorの紹介:newtypeフレンドリーなunboxed vector - Qiita
- Bodigrim/bitvec: Bit vectors library for Haskell
- Ix―Haskellでのインデックス演算 - Qiita
- 動的配列の無難なHaskell実装 - モナドとわたしとコモナド
- Haskell base proposal: unifying vector-like types
- Haskell base proposal, part 2: unifying vector-like types
- rrb-vector: Efficient RRB-Vectors
木
- Haskell Tutorial: Implementing highly efficient data structures with Monoids and Fingertrees
- Palindromic tree
- HASKELL BINARY SEARCH TREE (BST) EXAMPLE
- Vertical Finger Trees
- 状態変化なしに効率的な辞書を実装する重み平衡木
- tree-diff: Diffing of (expression) trees.
- Persistent Red Black Trees in Haskell
- Tree: 親子関係の付け替え - Qiita
- HaskellでB-treeを実装 - でかいチーズをベーグルする
- radixtree: a prefix-tree parsing library for Haskell
- patrickdoc/hash-graph: A hashing-based graph implementation in Haskell
- [ANN] tree-traversals-0.1.0.0 : haskell
- Trees That Shrink - Vaibhav Sagar
- A Practical Introduction to Finger Trees
- HAMTs from Scratch - Vaibhav Sagar
- Visualizing Prequel Meme Prefix Tries with Recursion Schemes · in Code
- Initial Algebra Semantics for Cyclic Sharing Tree Structures
- Haskellで二分探索木, AVL木を書いた - Qiita
- 型レベルで値の個数の範囲を指定できるリストを使ってFinger Treeを実装する - GHCの型チェックプラグインを活用する - Qiita
Map
- tim philip williams :: Functional pearl: Nested Datacubes
- hashdos脆弱性とunordered-containers - Haskell-jp
- Follow the Denotation :: Reasonably Polymorphic
- nonempty-containers: Non-empty variants of containers data types, with full API
- hashtables
- The hetero-dict package
- Accidentally-Quadratic HashMaps | Blog | jackkelly.name
- data-map-strict-map-not-strict-map
Graph
- FP Graph Algorithms
- fgl
- Generating Mazes with Inductive Graphs
- An initial-algebra approach to directed acyclic graphs
- 2 09 Lazy Graph Processing in Haskell
- An algebra of graphs
- Graphs in disguise: from todo lists to build systems
- snowleopard/alga: Algebraic graphs
- Functional programming with graphs
- グラフ代数 | POSTD
- [論文/ライブラリ紹介] Algebraic graphs with class (functional pearl) - Qiita
- jaspervdj - Dynamic Graphs
- alx741/graphite: Haskell graphs and networks library
- pkamenarsky/knit: Ties the knot on data structures that reference each other by unique keys
ハッシュ
Time
- time: A time library
- time パッケージの使い方
- A Haskell Time Library Tutorial
- The hourglass package
- System.Timeを使うときは気をつけよう -
Data.Time
を使おう - Template Haskell でいい感じに時間の長さを書けるライブラリ duration を作った - ryota-ka’s blog
- Haskellの時間系ライブラリ time が提供する型 - Qiita
- A cheatsheet to the time library | William Yao
オブジェクト
オブジェクト指向は、ステートマシンを組み合わせてシステムを構築するものです。
関数型は普通のやつです。
– ゆかたゆ (@yukata_yu) July 28, 2019
https://twitter.com/yukata_yu/status/1155406739233103873
- Encoding Objects - School of Haskell | School of Haskell
- Object-Oriented Haskell
- Haskellでいかに多態を表すか
- FuctioNaL with OOP ~objectiveが諍いを終演に導く~
- lambda is not a four letter word - Reconciling concepts from FP and OOP
- Objects in Functional Languages — Infinite Negative Utility
動的型付けのエミュレート
- Data.Dynamic
- Dynamic Typing in GHC
- Typed reflection in Haskell
- chrisdone/dynamic: Dynamic typing in Haskell
import Data.Dynamic
typeSwitch :: Dynamic -> IO ()
typeSwitch d = do
case (fromDynamic d :: Maybe Int) of
Nothing -> return ()
Just i -> putStrLn $ "This is Int! : " ++ show i
case (fromDynamic d :: Maybe Bool) of
Nothing -> return ()
Just b -> putStrLn $ "This is Bool!: " ++ show b
main = do
let d1 = toDyn (8 :: Int)
let d2 = toDyn (True :: Bool)
typeSwitch d1
-- This is Int! : 8
typeSwitch d2
-- This is Bool!: True
Higher-Kinded Data
等式論証
- 運算の楽しみ
- Equational reasoning
- Equational reasoning at scale
- Heuristic guidance from equational reasoning
- Just do it: Simple monadic equational reasoning
- How to prove large software projects correct
- An exercise in equational reasoning
- Why prove programs equivalent when your compiler can do that for you? – Blog – Joachim Breitner’s Homepage
- 第三リスト準同型定理 - Qiita
- OBVERSE AND REVERSE