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

Scala example source code file (TypeCheckerWithExplicitTypesAST.scala)

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

Learn more about this Scala project at its project page.

Java - Scala tags/keywords

bool, exp, fun, literal, map, num, string, tybuiltin, tylam, type, typecheckerwithexplicittypesast, typeenv, tyvar

The TypeCheckerWithExplicitTypesAST.scala Scala example source code

package scalaz.example
package transformers
package typecheck

object TypeCheckerWithExplicitTypesAST {

  trait Literal
  case class Num(i: Int) extends Literal
  case class Bool(b: Boolean) extends Literal

  sealed trait Exp
  case class Id(name: String) extends Exp
  case class Fun(arg: String, argType: Type, body: Exp) extends Exp
  case class App(f: Exp, arg: Exp) extends Exp
  case class Lit(l: Literal) extends Exp
  case class If(tst: Exp, thn: Exp, els: Exp) extends Exp

  trait Type
  case class TyLam(f: Type, arg: Type) extends Type
  case class TyBuiltin(name: String) extends Type
  case class TyVar(name: String) extends Type

  type TypeEnv = Map[String, Type]

  val numT  = TyBuiltin("Num")
  val boolT = TyBuiltin("Bool")

  def litToTy(l: Literal): Type = l match {
    case Num(_)  => numT
    case Bool(_) => boolT
  }

  val predef: TypeEnv = Map(
    "+"  -> (TyLam(numT, TyLam(numT, numT))),
    "-"  -> (TyLam(numT, TyLam(numT, numT))),
    "==" -> (TyLam(numT, TyLam(numT, boolT))),
    "&&" -> (TyLam(boolT, TyLam(boolT, boolT))),
    "||" -> (TyLam(boolT, TyLam(boolT, boolT)))
  )
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala TypeCheckerWithExplicitTypesAST.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.