• 作成:

Haskell Day 2018に参加しました

Haskell Day 2018 - connpass

発表はせず, 聞き専です.

やっぱり遅刻しました

8時30分に起きる予定が9時30分に起きてしまったので, 会場に着いたのが本来10時のはずが10時53分になってしまいました.

一応メンターやるつもりだったんですが立候補する時間はとうに過ぎてしまいました.

あまり手を挙げて質問する人が居ないのでどっちにしろメンターとして活動するのは無理だった感が出てきました.

ハンズオン

を見てバグをGitHubのissueに立てました.

Ex5に「誤差を気にしなくて良い」と書いているにも関らず実際は気にする必要がある · Issue #78 · haskell-jp/makeMistakesToLearnHaskell

Haskellを導入した話とHRRの紹介

Haskell を導入した話と HRR の紹介

Haskellの置き換え前としてPerlが上がるのは初めて聞きました… 確かに時期的にはおかしくない, 私が新参なだけ.

JavaがJVMに閉じこもっている時からどのプラットフォームとの親和性が無いのはたしかにそう. MSが勝手に拡張したらキレましたし…

Haskellのunixパッケージがちゃんと整備されているのは, よく考えてみると当時のHaskellのシェア的にはクオリティ異常に高かったですね.

私がHaskell始めた時は既にGHC 7だったのでGHC 6は初めて聞きますね.

16,2600を欧米式カンマだと思って16万って読んでしまった, 別の数字でした.

Haskellのパーサコンビネータ使いやすいという特性は, 副作用を型で扱える言語特有なので, Rustとかの他の言語では置き換えにくい特性でしょうね.

ソフトウェアトランザクションメモリの存在は知ってましたけど, Haskellをweb用途ぐらいにしか使って無いので使ったことがなかった. やっぱり便利なんですねえ.

オープンリゾルバの検出システムはホットな話題. 今週これでDoS食らったので.

EDSL書きやすいのわかります. ncaq/haskell-import-graph: create haskell import graph for graphviz でもMonadでEDSLすごい使いやすいと感動しましたし, bitemyapp/esqueleto: New home of Esqueleto, please file issues so we can get things caught up! でも常に感動しています.

HRR: Project site の紹介. Persistent :: Yesod Web Framework Book- Version 1.6 はHaskellのデータ型からSQLマイグレーションする機能(不正確な表現)がありますが, HRRはTemplate HaskellでなんとデータベースのスキーマからHaskellの型を作ってくれるとのこと. それは驚き.

GHCのoverloaded labelの紹介です. これはesqueleto(persistent)に比べて明白に優れた点ですね. 名前変えたりするのは非常に面倒くさい.

私「esqueletoに比べてHaskell Relational Record優れている点は何ですか?」 「あまりライバルを調べてないのですが, 利用した人からは記述力が高いのではないかという感想がありました」 他の人「esqueletoはSQL的に正しくないコードを吐き出せてしまう」

Haskell/Servantで行う安全かつ高速なAPI開発

Haskell/Servantで行う安全かつ高速なAPI開発 - Speaker Deck

Servantには興味があります. 今はYesodで開発していってますが, Yesodのようなフルスタックフレームワークは中規模を超えて大規模になると破綻するのではないか, という懸念が生まれてきました.

ServantでHaskell Relational Recordを使っているという報告が出てきました. esqueletoの開発が停滞しているので新規にはHaskell Relational Recordの使用を検討していたので, 業務レベルでServantと組み合わせても問題ないという報告が出たのは嬉しいです. 今度大規模アプリケーションを組む時はServantとHaskell Relational Recordでやっていきたくなってきました.

Servantよお前もHandlerIOを底とするモナド変換子としているのか…

Mock Serverでランダムな値返せるのは面白いな. フロントエンドのテストが機械的にある程度できそう.

Swagger使ったことが無いからあんまりモチベーションが沸かなかったけど, PureScriptじゃなくてTypeScriptとかに接続するなら便利なのかな. PureScriptには直接ルートを変換する奴があるらしいので.

shakespeareをwebだけじゃなくてEmailに使ってるの我々もYesodでやっています. 生成したHTMLをpandocに突っ込んでプレーンテキストも申し訳程度に生成する.

全てが型で繋がった状態良いですよね. 私もYesodでそれ実現したかったんですがTypeScript部分までは手が回りませんでした.

amazonkaを使っているのか. lensしてたから敬遠してawsライブラリに逃げてしまいました.

やっぱりフロントエンドやるだけならElmが安定の選択肢なのかなー. 自分としてはPureScriptに踏み込みたい気がしますが.

並列並行言語Haskell

並列並行言語Haskel - Speaker Deck

Haskellによる並列並行プログラミングParallel and Concurrent Programming in Haskell · Simon Marlow 一時は英語版が無料公開されてたからよくGoogleに引っかかってた.

Threadripperの第1世代の最上位持ってまーす.

比較対照としてGo, Erlang, Rustが上げられてて, 大学の先生に「HaskellじゃなくてGoやErlang使えば軽量スレッドあるから並行プログラミング楽だよ」 と言われて, 「Haskellにも軽量スレッドありますよ!」って猛反論したのを思い出しました.

Go, Erlang, Haskellは軽量スレッドなんですがRustのtokioは「ゼロコストスレッド」なんですよね. 本当にゼロコストになるかは知らないですが. Zero-cost futures in Rust · Aaron Turon

分散は難しい. Erlangは言語レベルでサポートしているから面白いけれど.

asyncパッケージのasync関数で軽量スレッド作れるのRustのspawnと比べて楽すぎて泣く. Rustの構文は色々とごちゃごちゃし過ぎてますし所有権とかややこしすぎる

forkIOよりasyncが良いというのは初めて聞きました.

A Tour of Go in Haskell の宣伝.

HaskellでGC以外が自動で並列化されることはない. 私「あれっリスト内包表記とかやったとき並列化されなかったっけ?」 されないらしい. されたと思ったのは記憶違いみたいですね.

seqparは知っていましたがusingは知らなかった気がします.

Facebookの Haxl/readme.md at master · facebook/Haxl を使えばN+1問題を解決出来るらしい.

accelerate: An embedded language for accelerated array processing 良いな, CUDA使う時Pythonを拒否したい.

ThreadScopeデバッグ時によく見てましたが結局違うデッドロックが原因だったりすることが多くて, 有効に使えたことないなあ…

時間さえあればCloud Haskell使ってServantみたいなwebフレームワーク書いてみたいですね. 分散出来るのはでかい.

私「純粋関数をコールバックにするmapって自動で並列化できそうじゃないですか? 将来的に乗る可能性ありますか?」 syocyさん「コンテナの実装によってはあるかもしれませんが…」 igrepさん「自動で効率が良く並列化出来るかは微妙なので難しいのではないか」

Dhall: Haskellの新たなキラーアプリ

Dhall: Haskellの新たなキラーアプリ - Speaker Deck

私は1年ぐらい前に設定ファイルはオワコンと思っていました. 何故かと言うとスクリプト言語のEDSL(Groovyを使っているGradle) とかを設定ファイルにした方が設定するとめの汎用的に処理が出来て, 文法も明確で楽だと思っていました.

Emacs LispやVim scriptはその成功例で, 設定をプログラミブルに出来て素晴らしい拡張性を実現していると思っていました.

しかし, Dhallの必要性に上げられているように, 設定ファイルを書ける人に副作用や無限ループを起こされたら困ることは確かに結構多いですね.

そういう時はスクリプト言語ではなく設定ファイルが必要になることは十分納得できます.

整数だけではなく自然数型がプリミティブにあるの好き, ゼロ除算こわいもんね.

DhallがYAMLに変換できるの良い. とりあえず移行して互換性も保てる.

ちなみにDhallは既にEmacsにモードがあるようですね. psibi/dhall-mode

副作用も無限ループも無いの本当に安心でユーザに書いてもらうことが出来る.

hpackもDhallで書けるの良さそう. BlockScope/hpack-dhall: hpack's dhalling パッケージが超大規模になってきたら助かりそうですね.

DhallのファイルをHaskellの型として読み込めるのマジ!? やべえ.

OptionalとListの表記が同じな話, Optionalは要素数1のListと考えればしっくりくるんですよね.

Semigroupとは?Monoid?環?

Semigroupとは? Monoid? 環?

モノイドについては昔私も雑記事書きましたね. haskellプログラマ向けのモノイドの解説 - ncaq

マグマってなんだ? 半群とはどういう関係なんだ? と思ったら日本語では亜群と言うらしいですね.

半群はマグマに結合法則を付け加えたもの. マグマは閉じている(型がついてる)だけのようですね.

浮動小数点数は結合法則満たさないので本当は半群にはならない.

モノイドは半群に単位元を足したもの. NonEmptyは空リストが無いのでモノイドになれない.

群はモノイドに逆元を足したもの. 逆元は定数ではなく, ある値に対して逆元を取る関数になる.

And演算とかは逆元がないから群にはなれない.

可換半群たちの存在. リストの結合演算は可換ではないので当然可換半群にはなれない.

擬環. 加法可換群と乗法可換半群と加法単位元と加法逆元を持って可換なやつ.

環. 乗法を可環モノイドにして乗法の単位元を足したやつ.

自己準同型写像の話は駆け足だったのでちょっと理解できなかった.

体. 環の乗法を可換群(0を除く)にして加法の単位元と乗法の単位元が異なり乗法の逆元があるやつ.

体は制限が厳しいから有理数ぐらいしかなれない. 体では四則演算が使える!!!

矢澤にこ先輩といっしょに代数! - 大銀河宇宙No.1_Haskeller - BOOTH(同人誌通販・ダウンロード)

「代数」は「代数学」の略で「代数的構造」の略ではないのでは?という指摘. 確かに

「代数学」の略。

代数(だいすう)の意味 - goo国語辞書

と書いてありますね.

Wikipediaでも多元環という特別な代数的構造のことを代数と呼ぶことがあるとは書いてますが, 代数的構造のことは指さないようですね.

  1. 特定の数の代わりとして用いられる文字・記号などのこと。
  2. 代数学のこと。またそこで扱われる手法・対象などのこと。
  3. 多元環とも呼ばれる代数的構造のこと。

代数 - Wikipedia

代数的構造のことを代数と略すのは誤用っぽい.

モノイドが本当は演算とのペアで定義される問題, SumとProductを用意するのと, MonoidPlusとMonoidProdを用意するのどっちが良いのかずっと悩んでいる.

Haskellで作るCLI

Haskell で CLI

確かにHaskell学び始めた当初はコマンドラインプログラムを作りましたね.

ncaq/to-safe-name: replace windows and android special char

Stackもない時代にWindowsとAndroidでファイル名が通るようにするプログラムを書きました. 主にCDをリッピングした時向けですね. オプションも何もなかったのでgetArgsgetOptも使いませんでしたね.

その後HaskellでGitでコミットした時にSlackに文章をPostするCLIを書きました. Pythonとの組み合わせなんですが.

その時はoptparse-applicative使いましたね. ちょっと苦労しましたが.

optparse-applicativeを単純に使うと, 本当に網羅的にタスクの代数的データ構造とコマンドをマッピングできるかわからない.

そこでextensible

extensible攻略Wiki証明書切れてますね.

NoImplicitPrelude, classy-prelude使いとしてはおなじみ. まあ今はrioを使うのが良いのでしょうが.

みんなrioに移行しそうですね.

classy-preludeはMichael Snoyman製でYesodでも利用されでボイラーテンプレートでもimportされてるんですよ. だから安心だと思ってたらMichael Snoymanが作ってるStackでもrioを使い始めた. classy-preludeはそろそろ終わりっぽいですね…

MEDIUMさんwebからはMarkdown使えないのにAPIからだとMarkdown使えるのか… 謎…

Stackがない時代にYesodで開発してた時は, ちょっとパッケージのバージョンが上がっただけでプロジェクトのビルドが壊れたりして大変だった. 今はビルドが安定していて大変よい. 他の言語にも似た仕組みがあれば良いのになと思うまでになった.

gloss: 動かして遊んで学ぶHaskell

gloss: 動かして遊んで学ぶHaskell - Qiita

glossで作ってみた.

興味があったので聞きながら円が散開していくアニメーションを作ってみました.

ncaq/gloss-bump

本当は衝突も書きたかったんですが次の発表が始まったのでやめました. カクカクなのはVLCの設定をマトモに行ってないためです. 本当はもっとスムーズです.

スクリーンキャストもっとちゃんと設定しないと(いつかやる)(やらない).

Liszt あるいは永続データ構造を真に永続させる方法

Adobe Creative Cloud

シングルファイルのキーバリューデータベース?

私「acid-state: Add ACID guarantees to any serializable Haskell data structure. に対する強みは何でしょう?」 fumievalさん「一個のデータを追加するか小さく追加するかという違い? acid-stateあんまり使ってないから詳しいことはわからない」