Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package eip
- trait Functor[F[_]] {
- def fmap[A, B](f: A => B): F[A] => F[B]
- }
- trait Pointed[F[_]] {
- def point[A](entity: => A): F[A]
- }
- trait PointedFunctor[F[_]] {
- val functor: Functor[F]
- val pointed: Pointed[F]
- def point[A](entity: => A): F[A] = pointed.point(entity)
- def fmap[A, B](f: A => B): F[A] => F[B] = functor.fmap(f)
- }
- // Examples
- object FunctorList extends Functor[List] {
- def fmap[A, B](f: A => B) = (as: List[A]) => as.map(f)
- }
- object PointedList extends Pointed[List] {
- def point[A](entity: => A) = List(entity)
- }
- object PointedFunctorList extends PointedFunctor[List] {
- val functor = FunctorList
- val pointed = PointedList
- }
- object PointedOption extends Pointed[Option] {
- def point[A](entity: => A) = Option(entity)
- }
Add Comment
Please, Sign In to add comment