Coherent Implicit Parameter

Posted on 火 31 3月 2020 in プログラミング言語 • Tagged with Haskell, 型クラス, 型システム

アドホック多相を実現する方法として,型クラスがある.型クラスは,辞書渡しと呼ばれる方法により,かなり自然に elaboration ができる.ところで,この elaboration は暗黙的引数にも転用できることが知られている。特に、型クラスを搭載した Haskell では,その処理系 GHC の内部実装を利用して暗黙的引数を実現する reflection パッケージ が知られている.

ところで,暗黙的引数の仕組みは,単純に型クラスの型システムを転用するだけでは,coherence …


Continue reading

DerivingVia で deriving 戦略を模倣する

Posted on 月 30 3月 2020 in プログラミング言語 • Tagged with GHC, Haskell, GHC拡張

Haskell では、ボイラープレートは非常に嫌われており、それを撲滅するため強力な型システムの他にも幾つか機能が組み込まれている。その中で非常に強力な機能が、deriving だ。この機能は、データ型の型クラスインスタンスを、その名の通り導出してくれる機能である。Haskell 標準では、幾つかの標準の型クラスにおいて、事前に用意されたアルゴリズムによる導出ができるだけの機能だったが、GHC ではさらに3つの戦略を追加し、広範囲の型クラスの導出が行えるようになっている。特に最近入った DerivingVia と呼ばれる拡張の戦略は、deriving の可能性を大いに引き上げてくれる拡張である。

ところで、実は DerivingVia …


Continue reading

遅延評価でデバッグが困難になる状況

Posted on 日 29 3月 2020 in プログラミング言語 • Tagged with Haskell, 遅延評価, デバッグ

先日、Haskell 界隈で遅延評価によってデバッグがし辛いのはどんな時かと言う話があった。見た感じ、遅延評価によってデバッグのしにくさはそんなに変わらないと言う意見が結構あり、個人的には衝撃だった。僕自身は遅延評価にだいぶヘイトを溜めてる人なので、どういう状況でデフォルト遅延評価が嫌かを実感できる問題を作った。この問題を解けば、きっとヘイトを共有できるはずってわけ。一緒に地獄に落ちような。

なお、かなり主観に寄っていて、結構書き殴ってる部分が多いので、厳密な議論をするにはあまり良い例ではないかもしれない。個人的には、備忘録的な意味合いも強くて、今まで詰まったやつをまとめておくかみたいな感じでもある。

先に結論を書いておくと、

  • プログラム自体が大きくて [1]
  • 複雑な制御構造をしていて
  • (optional) 以下のいずれかの条件を満たす
    • 遅延評価を機能として使っている …

Continue reading

型クラスの Coherence と Orphan Instance

Posted on 金 20 3月 2020 in プログラミング言語 • Tagged with Haskell, GHC, 型クラス

Haskell には型クラスと呼ばれる重要な機能がある.これは名前の通り,型をクラス分けするための機能で,その型に対してある操作が構成できることをその型の性質とみなし,性質に名前がつけられる機能だ.この機能は,アドホック多相,つまりは型による静的なオーバーロードを実現する仕組みとしての側面もある.型クラスに対しては,型ごとにそのインスタンス,つまり操作の実装を与えることができ,ある型がある型クラスに所属していることを型注釈で表明することができる.その表明は,コンパイラによるインスタンスの自動検索で解決され,解決できなかった場合は型エラーになる.

さて,型クラスの仕組みは coherence という,かなり強い性質を要求する.今回は,この coherence がどういう役割を持つかを …


Continue reading

LaTeX の数式フォントに STIX を使う

Posted on 土 07 3月 2020 in ツール • Tagged with LaTeX, フォント, 数式, STIX

LaTeX では Computer Modern フォントが使われている.ただ,Computer Modern フォントはかなり古く対応してる文字もあまり多くない.特に日本語環境だと IPA フォントなどと併用して使われることが多い.僕自身は Computer Modern に代わる目的で作られた Latin Modern フォントと IPA フォントを使ってきたんだけど,最近数式環境だけ STIX フォントに切り替えた.そのメモ …


Continue reading

AtCoder の新環境テストの問題を解いてみる

Posted on 月 17 2月 2020 in 学習 • Tagged with Haskell, GHC, AtCoder, 競技プログラミング

AtCoder が現在新環境のテストをしている: https://atcoder.jp/contests/language-test-202001

今までの環境では GHC 7.10.3 だったのが,新環境では 8.6.5 になるので,この機会に参加してみるかということで,テストで公開されてる問題を解いてみた.そのコードと解説.なお,当方 AtCoder の …


Continue reading

State モナドの代わりに Reader モナドを使う

Posted on 木 30 1月 2020 in プログラミング • Tagged with Haskell, GHC, モナド

注意
この記事は公開当時主張に誤りを含んでいたため,大幅に書き直しています.また,公開当時の主張の誤りについても,付録として載せておきました.

Haskell で State モナドはモナドの代表格だ.Haskell 入門者は,多くの場合,状態を伴った計算を State モナドで書くことを習うだろう.しかし,実用上の多くの場面では,State モナドではなく他の選択肢を選んだ方がいい場合がある.一つの選択肢が,Reader モナドと可変参照を使う方法だ.今回は,この手法を使う利点と利用場面について考えていこうと思う …


Continue reading

始代数と終余代数が一致する条件

Posted on 月 16 12月 2019 in 数学 • Tagged with 圏論, cpo, F-algebra

http://ziphil.com/diary/application/26.html を読んでるとき,まとめたことを記事として残しておこうと思った.

参考文献は,

Barr, M. (1992). Algebraically compact functors. Journal of Pure and Applied Algebra, 82(3), 211 …

Continue reading

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

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

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

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

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


Continue reading

babel と core-js を使って,古いブラウザをサポートする

Posted on 水 27 11月 2019 in 運用 • Tagged with Web, JavaScript, Webpack, Babel, ブログ

Sentry でたまに,古い OS からのアクセスによるエラーレポートが来る.現状,このブログの JS は let / const 普通に使ってるし, for-of なども使っている.なので,一世代前のブラウザなどを使っていると,そこら辺の機能に対応していなくてエラーになる.試しにこの辺を改善してみると,どうなるかのか観測してみたいなと思って,ちょっとサイト設定をいじってみた.そのメモ.

なお,使った環境は以下のもの:

babel 7 …

Continue reading