haskell-jp / mokumoku-online #67

結局疲れちゃってmakeMistakesToLearnHaskellの続きしかできませんでした!GHCup v.s. Stackの件は後で!
... Replies ...
引数スタックの初期値について、とりあえず現状の自己流の処理のままとすることにしました。また、compileA についても Mark5 のままとすることにしました。
実行結果を確認すると、一応グローバルフレームにスーパーコンビネータごとにクロージャが作られて、処理が進むにつれて評価結果に置き換えられているように見えるのですが...
勉強会の際に達人の皆様の実装を拝見させていただいて修正しようと思います。その後、ex.4.28まで進めました。
Category Theory for Programmers (Part One: Part One: 7. Functors ~ 8. Functoriality) まで読了 ADT や多くのデータ構造が関手的であること Haskell では Bifunctor/Profunctor によってそれらの合成も関手的であることが自然に導かれる 他方 C++ では病的実装が必要で もはや見るのも痛々しい
競プロ典型 90 問 52 日目 - Dice Product(★3)2回挑戦して WA  Interactive は不慣れが露呈 トホホ
(2014) Bartosz Milewski (Part One: 9. Function Types ~)
あとハシゴで 54 日目 - Takahashi Number(★6)
山本悠滋です。今日は https://haskell-jp.slack.com/archives/CR2TETE5R/p1718420231272899 のYeohさんとお話ししながらstackとGHCupの件に取り組みます。時間があったらmakeMistakesToLearnHaskellも進めます。
S.K.です。申し込むのを忘れてしまいましたが、参加させてください。よろしくお願いします。
先週に引き続き、Implementing Functional Languages: a tutorial 4.7 Mark 6: Constant applicative forms and the code store の続きを進めていこうと思います。
ex.4.28 の効果についてテストプログラムを使って確認していました。自分なりに納得したつもりですが、結構心もとないです。その後、ex.4.29 を進めて動作確認中です。
Category Theory for Programmers (Part One: Part One: 9. Function Types ~ 10. Natural Transformations) まで読了 functors と natural transforms で 2-category を成す また morphisms の合成には vertical composition & horizontal composition があるのが興味深い 
競プロ典型 90 問 54 日目- Takahashi Number(★6) 2つのケースが TLE 他のケースは通るのに 厳しい現実 これらは頂点数2000以上のクリーク さて?
外出していて遅くなってしまいましたが、Yeohさんと喋りながらGHCupとstackの問題について調べていました。
残念ながら(?)懸念していた問題は再現しませんでした。どこかのバージョンで対策されたのかも知れません。
それから特に最新のGHCupだと、最初の設定のウィザードでstackがGHCをGHCupを通じてインストールするよう設定するか尋ねる機能が備えられており、デフォルトで問題を回避できるようになっているみたいなことがわかりました(今回はstackとGHCup両方が別々にGHCをインストールするよう設定した上で実験しています)。。
後、makeMistakesToLearnHaskellの更新はこちら: https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/e75a21d0c9dd8bba07306313a122b4a1e0c0b71b
先週終えたと思っていたGHCup対stackの件について、改めて調査する必要が出てきたので調べます。後、時間が余ったらタイプセーフプリキュアの更新や、いつもどおりmakeMistakesToLearnHaskellの続きをします。
あ、山本悠滋です(一応自己紹介)
こんにちは、てぴかと申します。
前々々々回に引き続き、今回が2回目の参加になります。

引き続き、を読み進めて行きたいと思います。
(2014) Bartosz Milewski (Part Two: 11. Declarative Programming ~)
あとハシゴで 56 日目 - Lucky Bag(★5)
S.K.です。今週もお世話になります。よろしくお願いします。
先週に引き続き、Implementing Functional Languages: a tutorial 4.7 Mark 6: Constant applicative forms and the code store の、続きを進めていこうと思います。
toyboot4e です。 Mutable な splay 木を作るための arena (空きスロットを連結リストで管理した Vector) を作ります
Arena を作りましたが、必要無かったです:sweat_smile: お先に〜
Category Theory for Programmers (Part Two: 11. Declarative Programming ~ 12. Limits and Colimits) まで読了 たとえば object a と b からそれらの product を考えるとき それを 2-category から圏 C へ functor と見るのがいかにも圏論的で感心した また limit / colimit も丁寧で分かりやすい
競プロ典型 90 問 54 日目-56 日目 - Lucky Bag(★5)素直にやれば TLE になってしまう NxS 程度の DP に持ち込めばよさそうだが 時間切れ
GHCup対stackの件のために、VS Code on Docker on WSL 2なる不思議な環境を作ってました。偉い時間かかった上に、なんかmacOSでやったときと挙動が違うのが辛かったです。
あと、タイプセーフプリキュアの更新をする前に、LTS Haskellのバージョンを上げたところ依存しているmonad-skeltonというパッケージが新しいbaseパッケージに対応できていなかったため、monad-skeltonの代わりにtransformersパッケージを使ってPreCure Monadを書き直しました。当初からmonad-skeltonを使うまでもないだろうことは分かっていたため結果オーライです。肝心の、タイプセーフプリキュアの更新はまだ途中です!
Yesodを勉強するつもりが、なぜかTemplate Haskellについて勉強していました。
しかし、Template Haskellを理解すると、Yesodの使い方が理解できるような気がしてきました。

一方`stack new MY_PROJECT_NAME yesodweb/minimal`でインストールしたプロジェクトの`src/Foundation.hs`を、
VSCodeで開くとエラー表示される箇所があります。
しかし、そこはYesodのことをもう少し理解できたら解消方法が見えてくるのかな?と思っています。
ex.4.29 の効果についてテストプログラムを使って確認していました。
今日は確認だけで終わってしまいました。結構時間がかかってしまっています。お恥ずかしい。
ex.4.29 の対応により、トータルのステップ数は減っているようですが、途中では ex.4.29 対応前の方が短い箇所もあり、正しく対応できたのかまだ確認できていません。
山本悠滋です。お昼ご飯を食べ終えてからですが、いつもどおりmakeMistakesToLearnHaskellの続きと、久々にcabal replの件を進めます。
(2014) Bartosz Milewski (Part Two: 13. Free Monoids ~)
あとハシゴで 57 日目 - Flip Flap(★6)
S.K.です。今週もお世話になります。よろしくお願いします。
先週に引き続き、Implementing Functional Languages: a tutorial 4.7 Mark 6: Constant applicative forms and the code store の、続きを進めていこうと思います。
https://github.com/BrechtSerckx/OpenSCAD を魔改造して制約で図形を書くくんを追加していきます
例えばこんなことを書いたときに点cの座標が定まってほしくて、中学数学の平面図形計算で出した制約条件をHM型推論と似た感じの同値類に割るソルバに突っ込んでやればいい感じになるのではないかということを考えています
pitagoras1 :: (Either Error Model2d)
pitagoras1 = sketch do
  a <- point & x 0 & y 0
  b <- point & x 4 & y 0
  v1 <- line & from a & degree 30
  v2 <- line & from b & degree 90
  c <- intersection v1 v2
  polygon [a, b, c]
Category Theory for Programmers (Part Two: 13. Free Monoids ~ 14. Representable Functors) まで読了 tabulate とか index など圏論と programming の接点のような用語にホッとする
競プロ典型 90 問 57 日目 - Flip Flap(★6)n, m が 300 の時バグってる 哀しい 後日要デバグ
本日はこれにて離脱
休憩が捗ってしまってあんま進んでません!延長戦頑張ります!
角度付きの線のない正方形くらいは動くようにしたかったけれどそこまで行っていないのでおなかが減るまで同じく延長戦
今週も ex.4.29 対応の効果についてテストプログラムを使って確認していました。
PushMarker 命令のおかげで、対応後に比べて対応前の方が1ステップ早く評価結果を値スタックにプッシュできるけど、その後の Return 命令で対応後の方では引数スタックから次の命令を1ステップで取り出せるのに対して、
対応前の方ではダンプから引数スタックの内容を復帰して、追加の Return 命令でようやく次の命令を取り出せるので、その部分は実質差分なしの様でした。
それ以とは別に、引数を評価する際に対応前は PushMarker 命令を実行する分だけ1ステップ余計にかかってしまうので、トータルすると対応前に比べて対応後の方が短いステップで実行できている模様です。
確認にとても時間がかかってしまいました。まだ関連するテストプログラムの一部しか確認できていませんが、ようやく効果が少し確認できてきたかもしれません。
本日のmakeMistakesToLearnHaskellの進捗。課題18が埋まった!次回一通り見直してひとまず終了。
https://github.com/haskell-jp/makeMistakesToLearnHaskell/commit/a0e086049dc36099f79a29b94976f922d44bf147
内部実装用のputEqをexportしてx座標やy座標の制約として渡したら動くところまでは来たのでヨシということにします
obj :: OpenSCADM Model3d
obj = do
  let ~(Right r) = traceShowId $ sketch
        do
          a <- point & x 0 & y 0
          b <- point & x 4
          c <- point
          d <- point & y 4
          putEq a.y b.y
          putEq a.x d.x
          putEq c.x b.x
          putEq c.y d.y
          Sketch.polygon [a, b, c, d]
  pure $ linearExtrudeDefault 1 r
cabal replの件は、設計を変えてからたくさん落ちるようになったテストのデバッグ中です。相変わらずattoparsecはしんどいですね。sydtestの機能にちょっと詳しくなりました
山本悠滋です。
出先なので、帰ってからいつも通りmakeMistakesToLearnHaskellやcabal replの件の続きをします。
先週の続きの制約で平面sketchを生やすくんを作ります
フライング進捗をお見せしたかったのだけれどy座標が上下逆になるバグをデバッグ中です
直った
(2014) Bartosz Milewski (Part Two: 15. The Yoneda Lemma ~)
あとハシゴで 59 日目 - Many Graph Queries(★7)
S.K.です。今週もお世話になります。よろしくお願いします。
先週に引き続き、Implementing Functional Languages: a tutorial の 4.7 Mark 6: Constant applicative forms and the code store の続きを進めていこうと思います。
当初考えていたケースが一通り動くようになりました
あとは点と直線の距離ソルバくんを追加してフィレット含む円型周りを扱えるようにしたい
makeMistakesToLearnHaskellの課題18の細かい修正ばっかりやってます。延長戦で今日中に終えたい!
... Replies ...
面取りの実装方針を考えつつクネクネしています
Category Theory for Programmers (Part Two: 15. The Yoneda Lemma ~ 16. Yoneda Embedding) まで読了 であるが読んでも得心がいかないので 15章に戻って熟読玩味 脳味噌が暴発しそう
競プロ典型 90 問 59 日目 - Many Graph Queries(★7) Data.Graph.path を使えば小規模グラフの場合は自明 それ以外はいくら待っても答えが返ってこない それが本問の眼目なのだろうが はてどうしたものか? SCC 分解してコンポーネント間の依存関係を枝とする一段上のグラフを考えるのかな? 実装即テストより思案投げ首ばかりでウジウジしてる