@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:中高生は不動点を知らないので.

続きを読む

Coyoneda って…… お前 functor がデータ構造になっただけやんけ!!

operational (あるいは freer) と呼ばれているものの説明として,

  • a) Coyoneda を使うと,kind が * -> * であるような任意の型から functor を作り出せる
    • 任意の型 f :: * -> * について Coyoneda fFunctorインスタンスになる
  • b) Free を使うと,任意の functor から monad を作り出せる
  • a と b を組み合わせると,適当な型 f :: * -> * から monad を作り出せて便利〜🙌

というストーリーが往々にして語られる*1

*1:少なくとも2年ぐらい前に lotz 先生に聞いたときはそうだった.

続きを読む

カラーコードを渡すと色のプレビューをしてくれるコマンドラインツールを作った

引数としてカラーコードを渡すと,指定した色のプレビューをしてくれるコマンドラインツールを Rust で書いた.

github.com

もちろん 24-bit color 対応の端末エミュレータを使っていないとちゃんと動かない.2018年上半期に作った役に立たないものランキング第一位.

続きを読む

Template Haskell でいい感じに時間の長さを書けるライブラリ duration を作った

Template Haskell を使って,時間の長さをいい感じに(人間が読みやすい形で)記述できるライブラリを作った.

hackage.haskell.org

github.com

(実は GW 前くらいには既に公開していたけど,ブログを書く余裕がなかった……)

続きを読む