haskell

Control.Monad.foldM_ ではなく Data.Vector.foldM_ を使いましょう

Mutable array の prefix sum を余計なメモリを消費せずに計算したい時など、「基本的には mapM_ なんだけど、map してる関数の挙動がそれまでに map し終わった部分の結果に依存して欲しい」ような計算の時、私は foldM_ を使ってたんだけど、これが時々、…

Parsec 学習中

import Text.ParserCombinators.Parsec import qualified Text.ParserCombinators.Parsec.Token as P import Text.ParserCombinators.Parsec.Language (emptyDef)うーん、これなんとかならんのか? 長いんですけど…。複数語だからコピペもだるい…

めも: hugs は -98 option つけないと Parsec 動かない 追記: あ、でも .emacs に追加したらもう関係ないか。

error 関数の出力って stderr に行かないのかよ…orz

Haskell で or-pattern ってどうやって書くんだろう…

Category product ←まだこんなところだったりする

"Category products of a given family of objects is unique up to isomorphism." 嘘ぉ。これどうなん? GIMP で矢印つき曲線の描き方がわからんので、超落描きスマソ。こういうきれいな図は何で書いてるのかな。 要するに AxB が「本物の」A, B の product …

main から遠く離れた関数から警告を出力するのってどうやるんだこれ? Trace module とかが使ってる危ない関数使うのか? それができんと compiler の類全然書けんよな。それ以外も難しそう。

うーむ、ちょっと使ってみてるけど、何かと latent typing が恋しいのはナゼ。でも型 error だけ取ってれば bug がなかなか出ない。Hindley-Milner 凄ぇ。

無点

map2 :: (a -> b) -> (c -> d) -> ([a], [c]) -> ([b], [d]) -- map2 f g (xs, ys) = (map f xs, map g ys) -- map2 f g = uncurry $ (. map g) . (,) . map f -- map2 f g = uncurry $ (. (,) . map f) (. map g) -- map2 f g = uncurry $ (. (,) . map f) …

メモ

expr1 $ expr2 = ((expr1) (expr 2))ゆえに e1 $ e2 $ e3 = ((e1) ((e2) (e3)))で f . g $ x = ((f . g) (x))

Point-free

eq f = \x -> \y -> f x == f yの body を point-free に書き直したい。しかし思い付かない。Point-free にしたところで別に意味は無いけど…

haskell source の先頭に書く物

car = fst cadr = snd

優先度低でちびちび勉強してたり。Monad で I/O。なんだ Haskell の I/O が参照透過てそういうことか。 しかし未だに構文がはっきりつかめん…