All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kynthus.hatalib.argparse.concept.Initial.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 add field convert ${Derived}.")
trait Initial[Derived] extends Any {

  /**
   * 初期値として設定可能なフィールドです。
   *
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  type Member

  /**
   * 設定後に返すべき型です。
   *
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  type Result

  /**
   * 初期値を設定して返します。
   *
   * @param derived 初期値を持つ値
   * @param member  追加する初期値
   * @return 初期値を追加した結果
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  def apply(derived: => Derived, member: => this.Member): this.Result

}

/**
 * 初期値の追加に関連する機能を定義します。
 *
 * @author Kynthus Auoeau
 * @since 1.0.0
 * @version 1.0.0
 */
object Initial extends AnyRef {

  /**
   * 追加する型と追加後の型をコンパイル時に取得します。
   *
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  @implicitNotFound("Cannot add field of ${Input} convert ${Derived}.")
  final type Aux[
    Derived,
    Input,
    Output
  ] = Initial[Derived] {
    type Member = Input
    type Result = Output
  }

  /**
   * 現在のスコープに含まれる[[Initial.Aux]]の型クラスインスタンスを取得します。
   *
   * @param base スコープに含まれる型クラスインスタンス
   * @tparam Derived 初期値を持つ型
   * @tparam Input   初期値として追加可能な型
   * @tparam Output  設定後に返すべき型
   * @return スコープに含まれる型クラスインスタンス
   * @author Kynthus Auoeau
   * @since 1.0.0
   * @version 1.0.0
   */
  final def apply[Derived, Input, Output]
  (implicit base: this.Aux[Derived, Input, Output]):
  this.Aux[Derived, Input, Output] = base

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy