Skip to content

Instantly share code, notes, and snippets.

@vvviiimmm
Created February 14, 2018 21:36
Show Gist options
  • Save vvviiimmm/2d7e8a585238149fc987af3ae0c14790 to your computer and use it in GitHub Desktop.
Save vvviiimmm/2d7e8a585238149fc987af3ae0c14790 to your computer and use it in GitHub Desktop.
type Algebra[F[_], A] = F[A] => A
val algebra0: Algebra[ExpressionF, Int] = {
case ValueF(v) => v
case AddF(e1, e2) => e1 + e2
case MultF(e1, e2) => e1 * e2
}
val algebra1: Algebra[ExpressionF, String] = {
case ValueF(v) => v.toString
case AddF(e1, e2) => "(" ++ e1 ++ " " ++ e2 ++ ")"
case MultF(e1, e2) => e1 ++ e2
}
val algebra2: Algebra[ExpressionF, Boolean] = {
case ValueF(_) => true
case AddF(e1, e2) => e1 || e2
case MultF(e1, e2) => e1 && e2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment