Haskell

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

Template Haskell を使って,時間の長さをいい感じに(人間が読みやすい形で)記述できるライブラリを作った. hackage.haskell.org github.com (実は GW 前くらいには既に公開していたけど,ブログを書く余裕がなかった……)

Maybe と IO を一緒に使いたくなったら

たまには初学者向けにライトな話題を. 対象読者 すごいH本を12章か13章ぐらいまでは読んだ do 構文を使って IO などの処理が書ける Haskell のプログラムはなんとなく書けるが,あまり綺麗に書けている気がしない

TypeFamilyDependencies の実用的な例を考える

FunctionalDependencies という GHC 言語拡張がある.Haskell Wiki によると, Functional dependencies are used to constrain the parameters of type classes. と書かれているが,これはどういうことか. Haskell Language Report で定められた範囲では,…

Template Haskell でコード中に JSON を埋め込んだりコンパイル時にファイルから型安全に読み込んだりする

前回よりはもう少し実用的な例を. Template Haskell を使って,Haskell のコード中に JSON をそのまま埋め込むことができるようにする.また,あらかじめ用意しておいた JSON ファイルをコンパイル時に読み込み,指定したデータ型の値にする. ToC コード中…

Rust の turbofish と GHC 8 の Type Application ― または我々は如何にして多相な関数を単相化するか

Rust には std::str::FromStr という trait があって,データ型がこれを実装すると,from_str という名前の associated function *1 を通じて,str からそのデータ型に変換できるようになる. use std::str::FromStr; fn main() { let x = i32::from_str("42…

ないんたんのパーザを書いた

京都に住んでいた頃は,ズバリ大学付近の予想降水量をないんたんで知ることができたが,ないんたん天気予報@東京 で提供されているのは,本郷・駒場・大岡山・六本木ヒルズの4ヶ所なので,以前に比べると自分の行動範囲からは遠のいてしまった.が,普段は目…

Haskell でマルコフ連鎖を用いたツイートの自動生成

元ネタ morishin.hatenablog.com やったこと これまでの Twitter 上の発言をもとに,マルコフ連鎖で文章を生成して,それを垂れ流す bot がいるとおもしろいかなと思って作った.しゅうまい君 (@shuumai) みたいなものなのだけど,ソースが特定の人物のもの…

キヨシ

界隈の人たちはみんなポエムを書くのが好きなので,散々既出だと思うけど,先週京都にいるときに少し話が出て,自分だったらこう書くかなぁと,フワッと思ったものを書き下してみた. import Data.Bool (bool) import Data.List (isPrefixOf) import System.…

beautiful people

data Person = Person { isBeautiful :: Bool , isNice :: Bool , isTall :: Bool } deriving Show type People = [Person] people :: People people = let b = [minBound ..] in Person <$> b <*> b <*> b beautiful :: People -> People beautiful = filte…

パターンマッチなんか書いたら負け (モナドがあるから)

この記事は CAMPHOR- Advent Calendar 2015 26日目の記事です. はじめに (弁明) 個人的な意見といたしましては,別にパターンマッチを使おうが負けだとはこれっぽっちも思っておりませんし,むしろ,Haskell におけるパターンマッチは非常に強力な言語機構…

vty + StateT で画面のスクロールを実装する

この記事は CAMPHOR- Advent Calendar 2015 4日目の記事です. こんにちは,@ryota-ka です.今年もアドベントカレンダーの記事がやって参りました. 今回の記事では,ncurses を使ってターミナル上でフルスクリーンアプリケーションを作成し,ユーザーのキ…