org.kynthus.hatalib.argparse.concept.ChildrenParser.scala Maven / Gradle / Ivy
The newest version!
package org.kynthus.hatalib.argparse.concept
import scala.annotation.implicitNotFound
/**
* 特定の型から子パーサへ分岐できることを意味します。
*
* このトレイトは型クラスとなっており、例えば[[scala.Predef.String]]の[[scala.List]]から子パーサへ分岐する場合、
* 例に示すような型クラスインスタンスを定義します。
*
* @tparam Derived 子パーサへ分岐させる型
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
@implicitNotFound("Cannot make children convert ${Derived}.")
trait ChildrenParser[Derived] extends Any {
/**
* 子パーサへの分岐後に返す型です。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
type Result
/**
* 子パーサへ分岐した結果を返します。
*
* @param derived 子パーサへ分岐可能な値
* @return 子パーサへ分岐した結果
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
def apply(derived: => Derived): this.Result
}
/**
* 子パーサへの分岐に関連する機能を定義します。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
object ChildrenParser extends AnyRef {
/**
* 分岐後の型をコンパイル時に取得します。
*
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
@implicitNotFound("Cannot make children convert ${Derived}.")
final type Aux[Derived, Output] = ChildrenParser[Derived] {type Result = Output}
/**
* 現在のスコープに含まれる[[ChildrenParser.Aux]]の型クラスインスタンスを取得します。
*
* @param base スコープに含まれる型クラスインスタンス
* @tparam Derived 子パーサへ分岐可能な型
* @tparam Output 子パーサへ分岐した型
* @return スコープに含まれる型クラスインスタンス
* @author Kynthus Auoeau
* @since 1.0.0
* @version 1.0.0
*/
final def apply[Derived, Output]
(implicit base: this.Aux[Derived, Output]):
this.Aux[Derived, Output] = base
}