alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (t4079_1.scala)

This example Scala source code file (t4079_1.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

a, a, apply, apply, b, b, cat, compose, composet, f, functor, functor, list, option

The Scala t4079_1.scala source code

trait Functor[F[_]] {
  def map[A,B](fa: F[A], f: A => B): F[B]
}

trait ComposeT[F[_],G[_]] {
  type Apply[A] = F[G[A]]
}

case class Compose[F[_],G[_]]() {
  def Functor(implicit f: Functor[F], g: Functor[G]): Functor[ComposeT[F,G]#Apply] =
    new Functor[ComposeT[F,G]#Apply] {
      def map[A,B](c: ComposeT[F,G]#Apply[A], h: A => B) = 
        f.map(c, (x:G[A]) => g.map(x,h))
    }
}

object Cat {
  def compose[F[_],G[_]] = Compose[F,G]()
}

object Functors {
  implicit val List = new Functor[List] { 
    def map[A,B](fa: List[A], f: A => B): List[B] = fa map f
  }
  implicit val Option = new Functor[Option] { 
    def map[A,B](fa: Option[A], f: A => B): Option[B] = fa map f
  }
}

object Main {
  import Functors._
  val cf = Cat.compose[List,Option].Functor
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala t4079_1.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.