45 lines
1.5 KiB
Scala
45 lines
1.5 KiB
Scala
package green.thisfieldwas.embracingnondeterminism




/** This package contains classes that represent contexts encoding some


* measurable dimension whose quantities at runtime are unknown due to some


* nondeterministic effects. These effects impact how instances of the term


* contained within the contexts are produced.


*


* See each class for specific examples.


*/


package object data {




/** The identity context. This context has the identity of the value


* contained, and is thus the value contained. This context is always in the


* desired case as its instance is always present.


*


* @tparam A


* The type of the value.


*/


type Id[A] = A




object Id {




implicit val idFunctor: Functor[Id] = new Functor[Id] {




/** Given a structure `F[A]` and function `f: A => B`, if the structure is


* in the desired case, then apply the function such that `F[A] => F[B]`.


* If the structure `F[A]` is in the undesired case, then propagate the


* undesired case as `F[B]`.


*


* @param fa


* The instance of the structure to apply the function to.


* @param f


* The function to apply, if the structure is in the desired case.


* @tparam A


* The type of instances contained within the structure.


* @tparam B


* The type to map the instances into.


* @return


* The resulting structure.


*/


override def map[A, B](fa: Id[A])(f: A => B): Id[B] = f(fa)


}


}


}
