PS

2013-06-01から1ヶ月間の記事一覧

Type projection

Type projection SI-3443にさらっとtype projection: は、 と同値である、と書いてある。一方、言語仕様には しかないようで、コンパイラも にはエラーを出す。 class T { class A } type `_.A` = x.A forSome { val x: T } implicitly[`_.A`

Value types

Value type Scalaのコードで書ける型のこと(だと思う)。つまり、 type t = X のXに書けるようなものである。 Value typeはabstractとconcreteの二種類に分かれる。 Abstract value type Type parameterまたは(overrideされていない)abstract type memberのこ…

Kind generalization

Type-level generics Scalaでは、type-level generics(勝手にそう呼んでいた)が動かないのだが、 おおもとはSI-3443にあるようだ。たとえば trait TypeFunction { type Domain type Codomain type apply[x

ConstantType

ConstantType Scalaには7.typeのような型(constant type)がこっそり含まれていた。macroで取り出して使うことができる。 object ConstantTypeOf { type apply[T](x: T) = macro impl[T] def impl[T: c.WeakTypeTag](c: Context)(x: c.Expr[T]): c.Tree = { i…

Inference-Driving Macros

Scalaのmacroについて・・・ Inference-Driving Macros ってどういうことだろうと思っていたが、Scalaのmacroは相当賢くて def apply(x: String) = macro vimpl def vimpl(c: Context)(x: c.Expr[String]): c.Expr[Any] = ... としてもちゃんと戻り値の型をmacr…

Compile-fail-test

Scalaの話 ずっと無くて困っていた「コンパイルに失敗したら成功」というテストが Scalaのmacroで簡単に実装できるようだ。 Testing for compiler errors with untyped macros. shapeless/core/src/main/scala/shapeless/test/typechecking.scala at master …