Avatar
YoshikuniJujo
ef89ee45550f7377284d31e49fc57e5732ffc2b95a7bf35d0f1291d6fa278758
Haskell好き

some Foo.+++ other

みたいな演算子の感じって、どうなんだろう。慣れれば、まあ「あり」なのかな。

u `Freer.Bind` q

u Freer.:>>= q

とだと、どっちのほうがきれいかな。

catは、たとえばheadに行を渡していって、headが終了したら終わるのだけど、どうやってるのかな。

スイッチ2、もり上がっている感じかな。

日経平均がだだ下がりだな。

nostr:note17nz0ap27nqpu4qvktrzvn39pwvnk0q870s66am4vctse3vlpxrnsgld4v0

これ、後で読もう。

extensible effectsの枠組でconduitを作るの、「できない」と思ってたけどできちゃった。

とりあえずgzipを展開する例をちゃんと書いてから、全体を整えてhackageに上げよう。

この処理は、とりあえず「切り分け」てから「正規化」するのがわかりやすいかもしれない。

ここで言う正規化とは、「どこから始めるか」を0から7のあいだにするということ。

つまり、まずは「どこから始めるか」と「ビットの数」だけを計算しておいて、あとから必要なバイトだけにしぼるみたいな感じ。

bitの並びをbyteの並びと、先頭のbyteの「どこから始めるか(0..7)」とbitの数で表現したときに、そのbitの並びを特定の位置で前後に切り分ける処理って、なんかやたらとややこしい。

たとえば

Control.Monad.StateにState型とrunStateがあったとして、

import Control.Monad.Stateとして

StateやrunStateを使うよりも、

Control.Monad.StateにはS型とrunとがあって、

import Control.Monad.State qualified as Stateとして、State.S型やState.runを使うほうが、僕の好みである。

この問題はheadとかtailが「部分関数」であるというよりもやっかいな問題だ。意図に反する動作がしれっと続いていくよりも、どかんと壊れてしまったほうがましなので。

本当なら

take :: Int -> [a] -> Maybe [a]

とか

drop :: Int -> [a] -> Maybe [a]

とかになっていたほうがいい。

今の仕様だと知らないうちに嫌なバグを作り込みそうだ。

Foo a b cみたいな型をFoo' '[a, b, c]みたいな型に変換するようなことって、できないのかな。

yet another freer extensible effectsでyafeeのほうが語呂がいいかもしれない。

yet another freer effectsでyafeとか