These are chat archives for scalajp/functional

24th
Nov 2014
kenji yoshida
@xuwei-k
Nov 24 2014 01:54
この仕組み http://typelevel.org/blog/2013/06/24/deriving-instances-1.html 使っての、msgpackのシリアライズ、デシリアライズの型クラスのインスタンスの完全自動導出が作れてしまった気がする
Yuta Okamoto
@okapies
Nov 24 2014 01:56
おーw
kenji yoshida
@xuwei-k
Nov 24 2014 02:11
shapeless部分は切り離す?として、コア部分をScalazに依存させるかどうか悩ましい・・・今のところそれほどScalaz使ってないけど、今後それなりには使いそうだしなー
ちなみに、pocketberserkerさんのあれとも、msgpack本体にあるやつとも別に、完全に独自でmsgpackのScalaの型クラスベースなライブラリ試作してみていて、ある程度できたらリリースしたい
kenji yoshida
@xuwei-k
Nov 24 2014 02:23
ライブラリの名前、msgpack4s とかでいいかと思ったら、既にあった、ぐぬぬ・・・ https://github.com/velvia/msgpack4s
msgpack4z とかにするか・・・
pocketberserker
@pocketberserker
Nov 24 2014 03:59
おおー
Ryoichiro Oka
@ryo0ka
Nov 24 2014 06:46

質問です!こういうクラスがあったとして:

trait Hoge[A] {
  val value: A
  def perform(v: A): Unit
}

こういう処理をすると:

val h: Hoge[_] = null
h.perform(h.value)

こういうエラーがコンパイル時に出ます:

error: type mismatch;
found   : h.value.type (with underlying type _$1)
required: _$1
h.perform(h.value)
            ^

これは何故type mismatchなんですか?ちなみにAを抽象型で宣言すると普通に通ります

kenji yoshida
@xuwei-k
Nov 24 2014 07:04
[_] というのは、たしかJavaのraw型(JavaだとList<?> という書き方)との互換性のために存在していて、抽象型とも違うものだから、とかだろうけど、そのあたりの型まわり専門家じゃないし詳しく調べたことないのでそれほど自信ない
Ryoichiro Oka
@ryo0ka
Nov 24 2014 07:48
そうですか・・・べつに抽象型でもいいんですけど別のエイリアス用意してtype Hoge[A] = Hoge { type T = A}とか何となく不細工なんです
Ryoichiro Oka
@ryo0ka
Nov 24 2014 08:02
重複しているかもしれないけれど http://stackoverflow.com/questions/27100217/identical-raw-type
kenji yoshida
@xuwei-k
Nov 24 2014 09:36
あー raw じゃなく wildcard type か
Ryoichiro Oka
@ryo0ka
Nov 24 2014 10:58
ようするに変数xyの値を交換するのに第三の変数tが必要という話の延長線上ですね。。。
Ryoichiro Oka
@ryo0ka
Nov 24 2014 12:15
Javaには余り触らずにPerlから移住したようなもんだからget-and-put princinpleとか言われて一瞬はっ?となった