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

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

pipenv を WSL/Debian で使う際の注意事項

Posted on 木 14 11月 2019 in 環境構築 • Tagged with Python, Debian, WSL

久しぶりに Windows 上で環境構築をすることになったんだけど,その際 Pipenv をインストールするのにちょっと躓いたので,その備忘録.

Pipenv を入れた時のエラー

Windows 上で開発する際は, WSL/Debian を使っている.で,新しい環境でもこれで行くことにして, Pipenv を Python3 環境で使いたかったので,次のようにして入れた:

sudo apt update
sudo …

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

iptables から nftables への移行

Posted on 土 21 9月 2019 in 運用 • Tagged with Debian, iptables, nftables, ファイアウォール

Debian GNU/Linux 10 ,コードネーム buster が安定板リリースを迎え結構経ったので,そろそろアップグレード案件やるかみたいな感じになった.

さて, buster からは iptables に代わり nftables が採用されている.なので, iptables から nftables に移行が推奨されている.で,既存の iptables のルールセットを nftables …


Continue reading

Scala の Map.flatMap の罠

Posted on 火 03 9月 2019 in プログラミング • Tagged with Scala, Collection Library, Map, 標準ライブラリ

Scala のコレクションライブラリは難しい.最近,強くそう思える事案に出くわしたので,そのメモ.なお,使った環境は以下の通り:

Scala のバージョン 2.13.0
Java Runtime のバージョン Java(TM) SE Runtime Environment 1.8.0_131
Java Hotspot …

Continue reading