多相関数を第一級で取り扱う

Posted on 金 06 12月 2019 in プログラミング言語 • Tagged with Haskell, GHC拡張, GHC, 多相関数

今回は,GHC拡張の一つ RankNTypes の紹介をしようと思う.もうちょっとちゃんとまとめたのをいつか Haskell-jp かどっかに投稿したいと思ってるんだが,時間が (さっさと書け).

さて, Haskell のプログラミングにおいて多相関数はかなり重要な役割を持つ.しかしながら,標準の範囲では多相関数自体を第一級の値として扱うことはできない.私たちに許されるのは,多相関数を定義することだけだ.まあ,それだけでもかなり有用なんだけど,多相関数を第一級で扱えると,色々プログラミングの幅が広がる.今回は,多相関数を第一級として扱うというのはどういうことか,そしてそれをするにはどうすればいいか,そうすることで何がうれしいのかを簡単に触れられたらと思っている.

多相関数を第一級で扱うとはどういうことか …


Continue reading

type family を使って再帰的 ADT をオープンにする

Posted on 日 17 11月 2019 in プログラミング • Tagged with Haskell, GHC, GHC拡張

元ネタは Trees that grow . Haskell では代数的データ型 (ADT) を使ってプログミングに使うデータ構造を定義し,その構造を操作することによりプログラミングを行う. ADT はパターンマッチが容易で,再帰的に定義でき,基本的に閉じた構造になっている.そのため便利な反面,その機能が保守で仇となる場合もある.この問題は古くから知られており,いくつかの解決策も提案されてきた.今回はこのうち,現在 GHC で採用されつつある type family を使った解決方法を紹介する.

なお …


Continue reading

リテラルをコンパイラ時にチェックする

Posted on 月 28 10月 2019 in フレームワーク • Tagged with Haskell, GHC, リテラル, GHC拡張

Haskell はいくつかのリテラルで型クラスを使用したオーバーロードを許容している.例えば,Haskell で 1 と書いた場合,この型は 1 :: Num a => a になり, Num のインスタンスを定義することで,リテラルに対する実体をユーザも制御できるようになっている.GHC拡張で文字列に対してのオーバーロードなども提供されている.ただ,提供するデータ型とリテラルによっては,プログラムが意図通りに動かなかったりクラッシュしてしまったりすることがある.これを事前にチェックする仕組みを,コンパイラプラグインで実装する方法を紹介する.

なお,環境として以下を想定している.

GHC …

Continue reading

Local Do と型クラス

Posted on 土 27 7月 2019 in プログラミング言語 • Tagged with Haskell, GHC, GHC拡張, do構文, 型クラス

現在, GHC に 線形型の提案 がされていて活発に議論されている.プロトタイプも ここ から利用可能だ. Docker イメージも利用可能なので,気軽に試せると思うので,ぜひ試してみてくれ.

さて,そんな線形型の提案の裏で,副産物として Local Do という拡張が提案されている.今回は,その拡張の紹介と最近思ってることのお話.

Local Do 拡張

Haskell の …


Continue reading

Functor / Applicative / Monad が表すもの

Posted on 土 13 4月 2019 in 直感 • Tagged with Haskell, GHC, GHC拡張, 標準ライブラリ

https://kazu-yamamoto.hatenablog.jp/entry/2019/04/11/111238 の記事に触発されて,ちょっと書く気になった.こちらも面白い記事なので,ぜひ参照してほしい.

Haskell 2020 で Applicative が追加される見込みだ (そもそもちゃんと 2020 年に出るのか怪しそうだが).それを踏まえて,標準ライブラリに入る Haskell の特徴的な一連の型クラス …


Continue reading