These are chat archives for scalajp/functional

13th
Feb 2016
lyrical logical
@lyricallogical
Feb 13 2016 03:02
List.empty[Kleisli[A \/ ?, B, C]].sequenceU はいいのい type T[B, C] = Kleisli[A \/ ?, B, C]; List.empty[T[B, C]].sequenceU は駄目なのなんなんですかね…
lyrical logical
@lyricallogical
Feb 13 2016 03:37
いうまでもない気がしたけど明記しておくと scalaz の話でした。>sequenceU 問題
Manabu Nakamura
@gakuzzzz
Feb 13 2016 05:46
type T[B, C, D] = Kleisli[A \/ D, B, C]
List.empty[T[B, C, ?]].sequenceU
にする必要があるとかですかね?
kenji yoshida
@xuwei-k
Feb 13 2016 07:56
scalazというか、scala自体がtype alias使うか否か?で、推論出来るかどうか変わるので、汎用的な解決方法あまりない、っていう認識…。
頑張ってscalaz.Unapplyのインスタンス定義追加などで、どうにかなる場合はある程度あるけど
Manabu Nakamura
@gakuzzzz
Feb 13 2016 09:30
    type A    = List[?]
    type B    = List
    type C[E] = List[E]

    Functor[A] // NG
    Functor[B] // NG
    Functor[C] // OK
こんな感じですね
kenji yoshida
@xuwei-k
Feb 13 2016 09:34
scalaz 7.1 と 7.2 で違うし、(REPLで試したせいなのかわからないけど) りりろじさんが言ってる結果とも違う(?)場合あるっぽいしつらい
lyrical logical
@lyricallogical
Feb 13 2016 11:06
やっぱり一般的な解決法ないですよねえ…
lyrical logical
@lyricallogical
Feb 13 2016 11:18
repl の -k(ind)オプションで同じなのに解決できなくなったりするの闇過ぎる
lyrical logical
@lyricallogical
Feb 13 2016 11:36
14:46 の gakuzzzz さんの例は良く分からないというか Kleisli の kind ( -> ) -> -> -> * なので \/ の部分 kind あわないんじゃないですかね 携帯から入力大変すぎる
Manabu Nakamura
@gakuzzzz
Feb 13 2016 11:39
あ、そうか。 Kleisli の第一引数 が (*->*) の必要がありますね。勘違いしました。失礼しました
lyrical logical
@lyricallogical
Feb 13 2016 11:40
いえいえまあなんにせよよくわかないですねえ type alias は…
そもそも sequenceU というか Unapqly の存在が闇なんですが
kenji yoshida
@xuwei-k
Feb 13 2016 11:48
Unapplyなどでの推論、うまくいったらラッキーだけど、うまくいかなかったら(少しだけ試行錯誤したのち)諦めて考えるのやめて型明示する、みたいな方針だな個人的には・・・。稀にScalaのversionによっても推論可能か否かが変わる場合あって、深く考えても疲れるというか
https://meta.plasm.us/posts/2015/07/11/roll-your-own-scala/ そのあたりなどにも詳しいtravisbrownさん何なんだ・・・ってなる(このblog記事あまり理解できてないというか、たいしてちゃんと読んでない)
lyrical logical
@lyricallogical
Feb 13 2016 17:01
まじめに Unapply.scala を読むことにした
lyrical logical
@lyricallogical
Feb 13 2016 17:39
前述の type alias の話冷静に考えると当たり前だった…