Dhall v3.0.0 がリリースされた

Dhall v3.0.0 がリリースされた.メイジャーバージョンの更新ということで,いくつかの破壊的変更を含む.

続きを読む

Russell のパラドクスと λx.xx (または自己言及がもたらす豊かさと危うさについて)

お盆に数日の休みがあったので,Ludwig Wittgenstein の『論理哲学論考 (Tractatus Logico-Philosophicus)』を読み始めた.Wittgenstein の著作を読んでいると,彼が理論を継承し,また批判する対象となった Gottlob Frege や Bertrand Russell の思想にも同時に触れることになる.

『論考』の命題 3.3 以下に,Russell のパラドクスに対する解決策を提示し,Russell の主張を反駁する場面が見られるが,この記事ではむしろ,Russell 自身の回答である型理論 (theory of types) による解決策に目を向けたい.我々が普段プログラムを記述する際に触れる型の概念が如何にして生まれ,発展してきたのかを見ていくこととしよう.

続きを読む

Dhall で Kubernetes の YAML 管理をスマートにやっていく

こんにちは.Kubernetes 班の ryota-ka です。皆さん Kubernetes やっていますか?*1

Kubernetes をやっていこうとすると,大量の YAML を書くことになって大変である.大量の YAML を書くことは大変なので,大抵コピペする.コピペをするが,コピペは怖い.例えば,deployment を定義する YAML をコピペしたとして,万一 label を変更するのを忘れて,想定していない service からルーティングされたりすると悲惨である.そもそも(個人的な意見ではあるが) YAML の仕様自体があまりにも複雑かつ難解であり*2,ある種の仕様が余計なお世話だともしばしば感ぜられる*3

最近では kustomize が将来的に kubectl に統合される予定で開発が進められているが,この記事では異なる切り口として,Dhall lang を用いてプログラマティックに YAML ファイルを生成するという方法をご紹介したい.

*1:この冒頭挨拶は kubernetesに自分のコードがマージされるまでのフロー のオマージュです.

*2:一体どれだけの実装が YAML の仕様を満たしているというのか!

*3:"yes" を真だとみなしたりだとか.

続きを読む

@cycle/react を触ってみる

数日前,@staltz 氏から Cycle React のリリースがアナウンスされた.

@cycle/react を含む一連のライブラリ群は,React component を Cycle.js の中で用いることを可能にし,Cycle.js の component を React の中で用いることを可能にする.

続きを読む

代数的データ型と初等代数学

関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 HaskellOCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,Rust や Swift などの言語にも採用されている.

「代数的データ型とはなんですか?」と問われたときには―問われたことがないのでわからないのだが―おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう.

int 型や float 型など,「メモリ上の表現」という計算機の気持ちに極めて寄り添ったプリミティヴなデータ型や,オブジェクトがヒープに展開された先のアドレスを保持する参照型にしか馴染みがないプログラマにとっては,データ型の定義に「代数」などという仰々しい概念が登場するのは不思議に思われるかもしれない.しかし,代数的データ型自体の有用性は,少しプログラムを書けばわかる*1はずであるし,そもそも「代数」などという難しい言い方をしなければ,自然数うしの足し算や掛け算,指数の計算などは,小中学校での教育を通じて万人が既に知っており,日頃から親しんでいるはずである.この記事では,人々がよく知る計算の上に成り立つ法則と,代数的データ型との類似性を示すことで,代数的データ型に親しみを持ってもらうことを目的としている.この記事を読み終えた頃には,「Option[T] とか T? とかいう型は {T+1} とでも書かれるべきものなのか〜」という理解がなされることが期待される.

基礎的な Haskell の読み書きと,概ね中学校から高校1年生くらいで習う程度の数学の知識があれば読み進められるはずである.また,この記事では再帰的に定義されたデータ型は扱わない*2

*1:効果には個人差があります.

*2:中高生は不動点を知らないので.

続きを読む