2019-01-31: 疲れている
やったこと
疲れてる
なんか体調に限界を感じる。
しんどみ。
Invertible Syntax Descriptionsを実装してみてる
http://www.informatik.uni-marburg.de/~rendel/unparse/rendel10invertible.pdf
ParserとPretty Printerを一気に実装できるやつ。
Scalaで実装すると、評価順序とかを一々考えなければなー、となることを除けばわりと動く。catsの型クラスを使ってみていて楽しい。
一つ気になるのはIso
がArrow
とかArrowChoice
にならないこと。
なんというかすごくそれっぽいのにならないのが気になる。
これはProfunctor
にならないこと、というか普通の関数をIso
に持ち上げようが無いことが原因なのだと思う。
つまり、
trait Profunctor[F[_, _]] {
def dimap[A, B, C, D](fab: F[A, B])(f: C => A)(g: B => D): F[C, D]
}
が実装しようが無い。いや、型を合わせるだけなら不可能じゃないのだけど、どう考えてもlawを満たさないのでNG。
これは普通の関数の圏じゃなくて、Iso
の圏上のProfunctor
を考えるといいっぽいのだけど、