Skip to content

Instantly share code, notes, and snippets.

import TrainOps._
import TrainService._
object TrainService {
type ANSWER = Either[String, List[TrainStatus]]
trait Train[A] {
def status(x: A): ANSWER
}
case class TrainStatus(name: String, Status: String)
case class 運行状況(area: String) {
List(Address(List("100-0001","100-0002"))) flatMap Addr.zip
// ->List[Addr.郵便番号] = List(100-0001, 100-0002)
case class Address(zip:List[String])
object Addr {
type 住所 = Address
type 郵便番号 = String
def zip:住所 => List[郵便番号] = _.zip
}
List(Address(List("100-0001","100-0002"))) map Addr.zip
//->List[List[Addr.郵便番号]] = List(List(100-0001, 100-0002))
import Addr._
def lift(f: 住所 => 郵便番号): Option[住所] => Option[郵便番号] = _ map f
lift(Addr.zip)(Some(Address("100-1000")))
// -> Option[Addr.郵便番号] = Some(100-1000)
Some(Address("100-0000")) map Addr.zip
//-> Option[Addr.郵便番号] = Some(100-0000)
List(Address("100-0000"),Address("200-0000")) map Addr.zip 
//-> List[Addr.郵便番号] = List(100-0000, 200-0000)
Addr.zip(Address("100-0000")) //-> Addr.郵便番号 = 100-0000
case class Address(zip:String)
object Addr {
type 住所 = Address
type 郵便番号 = String
def zip:住所 => 郵便番号 = _.zip
}
trait Cat {
type A
type B
type C
def f:A => B
def g:B => C
def f_g:A => C = f andThen g
}
trait Cat {
type A
type B
def f:A => B
}