haskell-jp / mokumoku-online #84

by Brent Yorgey (2009) "Applicative"  読了 よく使う pure (<$>) (<*>) に加えて (<**>) もある(使ったことはナイ)
```λ> [(* 2), (^ 2), (+ 2)] <*> [1..3]
[2,4,6,1,4,9,3,4,5]

λ> [1..3] <**> [(* 2), (^ 2), (+ 2)]
[2,1,3,4,4,4,6,9,5]```
さらに圏論的定式化もあって (**) を加えると `fmap (g *** h) (u ** v) = fmap g u ** fmap h v` とキレイな Laws になる これは Monad の (>>=) による Laws がグチャグチャなのが (>=>) によって書き換えるとキレイになるのに平行している Haskell は実務先行・理論後追(美観化)であるのが分かる:つまり実用上強力であるとともに 噛めば噛むほど味がある ただしそれで歯を折らないよう また脳内爆発に気を付けよう :exploding_head:
今週は「6.6 Mark 4: A separate full laziness pass」で扱っていたサンプルプログラムの処理途中の結果(identifyMFEs 関数の出力)で、
let の局所変数定義の右辺に関数の部分適用が残る原因と対策を確認していました。
原因はまだはっきりと理解できていないですが、局所変数定義の右辺式を等価的に書き換え(`+`の左右を入れ替え)たら、関数の部分適用がなくなった模様です。
とりあえず今のところは、この方法で対応することにして進めていこうと思います。
引き続き https://github.com/haskell-jp/makeMistakesToLearnHaskell/issues/121 に取り組みます。
何かしら、Qwikでmmlhの課題一覧を出すアプリを作りたい。
Typeclassopedia by Brent Yorgey (2009) を読んで苦手の type classes について学びます 今日は Monad から
S.K.です。遅くなってしまいましたが、今週もお世話になります。よろしくお願いいたします。
今週も Implementing Functional Languages: a tutorial の Chapter 6 Lambda Lifting の続きを進めて行こうと思います。
例の如く眠気のせいかあまり進まず。ブラウザーアプリ用のブランチを別にしていましたが、以前 https://github.com/haskell-jp/makeMistakesToLearnHaskell/milestone/2 の依存関係を整理しているうちに、結局ブラウザー版に集中した方がいいことに気付いたので統合し、ディレクトリー構成を考えています。
Typeclassopedia by Brent Yorgey (2009) "Monad"  読了
Monad の肝はコレでしょう: "ability to use the output from previous computations to decide what computations to run next" ナルホドね ここまでは好い
しかし次となると分からない: "parsers built using an Applicative interface can only parse context-free languages; in order to parse context-sensitive languages a Monad interface is needed"
独学者の悲しみがあるだけ 誰か教えて parser は厄介だし習熟に手間取るし また context-free/sensitive languages と言われても その方面の基礎がナイので 勉強する前に圧倒される
閑話休題 圏論的には Monad は return, fmap, join (often called η, T, and μ in the mathematical literature) で定義する流儀もある コーユー話が好き 図式で解く圏論的プログラムとかあったりして… さてもとにかく "`join` for the list monad is just concat" にもハッとさせられて嬉しい その意味で ”Utility functions” の章と参照文献の Henk-Jan van Tuyl A tour of Haskell monad functions は Aha! の宝庫だった 例えば "the analogue of mapM for Applicative is called traverse" に痺れた "Laws" の章では "`(>=>)`" で定式化の一択 "do" の諸章は嫌いなので飛ばし読み ”Further reading” の章は その手が世に氾濫している分充実しているが 大半は既読(消化とは言ってナイ) 圏論的定式化についての Derek Elkins issue 13 of the Monad.Reader は後日再訪してみよう
今週は先ず「6.6 Mark 4: A separate full laziness pass」の Ex.6.9, Ex.6.10 を進めました。
(Ex.6.10 については、勉強会で答えを聞いてしまったので、そうなることの確認をしただけとなりました。)
その後、MFE が (x*x) とならず (+ (x*x)) となる問題について、コア言語プログラムの書き替えでの対応ではなく、ラムダリフタ本体への対策を自分も行ってみることにしました。
MFE のルートノードが + の適用から * の適用に変わりましたが、まだ不完全ですので引き続き進めてまいります。Mark4 の完了まで、まだ時間がかかりそうです。
(オンラインでのもくもく会参加はおそらく)はじめましての @nobsun です。ニート歴1年になるHaskellアマグラマです。よろしくお願いします。
MicroHs を読んでみようと思います。てはじめに、何をどう読むかをさぐる感じです。
Typeclassopedia by Brent Yorgey (2009) を読んで苦手の type classes について学びます 今日は MonadFail から
S.K.です。遅くなってしまいましたが、今週もお世話になります。よろしくお願いいたします。
今週も Implementing Functional Languages: a tutorial の Chapter 6 Lambda Lifting の続きを進めて行こうと思います。
思ったより遅くなってしまいました。山本悠滋です。引き続き https://github.com/haskell-jp/makeMistakesToLearnHaskell/issues/121 に取り組みます。
課題(など)のファイルをQwikアプリ側に移して、その一覧を表示する処理を実装してみてます。
... Replies ...
Typeclassopedia by Brent Yorgey (2009) "MonadFail" 読了 非常に短い章だが Applicative を superclass にしたり MonadFail を分離するなど Monad をスッキリするための経緯が面白かった 昔は何でも Monad だったのネ まだ見えてない初期設計にありがち そりゃあモナモナと怨嗟の声があるわけだ 時間が余ったので Project Euler #983 で過ごす 10 次元 hypercube を平面に投射するのに 2素数の平方和の分解を用いるも 判定は Incorrect ! もっと小さく出来るのかしら? 超難解 誰か教えて
githubリポジトリの最初のコミット分を読みました。
簡単なメモを https://scrapbox.io/nobsun/MicroHs%E3%82%92%E8%AA%AD%E3%82%80
に置きました。
今週も「6.6 Mark 4: A separate full laziness pass」の、MFE の識別が正しくない問題の、ラムダリフタ本体への対策の続きを行いました。
とりあえず一通り対策を行ってみまして、テストプログラムを作成してテスト中です。Mark4 の完了まで、まだ時間がかかりそうです。
Typeclassopedia by Brent Yorgey (2009) を読んで苦手の type classes について学びます 今日は Monad transformers から
山本悠滋です。引き続き https://github.com/haskell-jp/makeMistakesToLearnHaskell/issues/121 に取り組みます。今日はブラウザーからGHCを呼べるといいな
S.K.です。遅くなってしまいましたが、今週もお世話になります。よろしくお願いいたします。
今週も Implementing Functional Languages: a tutorial の Chapter 6 Lambda Lifting の続きを進めて行こうと思います。
この後用事なので今日はここまで。例の如く眠かったりで実装は全く出来ず、 https://github.com/haskell-jp/makeMistakesToLearnHaskell/issues/121 で実装方法を検討してました。
今週も「6.6 Mark 4: A separate full laziness pass」の、MFE 識別が正しくない不具合への対策のテストを行いました。
簡単なケースは一応大丈夫そうですが、複雑なケースについて結果が正しいかどうか確認中です。Mark4 の完了まで、まだ時間がかかりそうです。
Typeclassopedia by Brent Yorgey (2009) "Monad transformers" 読了 意外に実例が少ないので やら Mandy Morning Haskell - Monad Transformers を参照した 今後はこれらをもっと使用したい いつもはナンチャッテ簡易 types しか使いまわして居ないので大いに反省 ヤッパ使わないと覚えん