Skip to content

Instantly share code, notes, and snippets.

@edwardGunawan
edwardGunawan / GenericTrait.scala
Created April 18, 2022 18:02
5 Anti Pattern for Writing Code in a Functional Programming Language
trait SomeTrait {
def fetchAll: Future[Seq[String]]
}
@edwardGunawan
edwardGunawan / ListOp.scala
Created April 18, 2022 18:02
5 Anti Pattern for Writing Code in a Functional Programming Language
implicit class ListOp[A](lst: List[A]) {
def filterBy(p: A => Predicate): List[A] = lst.filter{ p(_) match {
case Predicate.Keep => true
case Predicate.Discard => false
}
}
}
@edwardGunawan
edwardGunawan / ListRangeFilter.scala
Created April 18, 2022 18:01
5 Anti Pattern for Writing Code in a Functional Programming Language
List(1,2,4).filter{p => if(p > 2) Predicate.Keep else Predicate.Disacrd}
@edwardGunawan
edwardGunawan / filter.scala
Created April 18, 2022 18:01
5 Anti Pattern for Writing Code in a Functional Programming Language
def filter[A](p: A => Predicate): List[A]
@edwardGunawan
edwardGunawan / Predicate.scala
Created April 18, 2022 18:00
5 Anti Pattern for Writing Code in a Functional Programming Language
sealed trait Predicate
object Predicate {
case object Keep extends Predicate
case object Discard extends Predicate
}
@edwardGunawan
edwardGunawan / List.scala
Created April 18, 2022 17:58
5 Anti Pattern for Writing Code in a Functional Programming Language
trait List[A] {
def filter(p : A => Boolean): List[A]
}
@edwardGunawan
edwardGunawan / FutureEither.scala
Created April 18, 2022 17:52
5 Anti Pattern for Writing Code in a Functional Programming Language
trait SomeInterface {
def someFunction(): Future[Either[Throwable, String]]
}
@edwardGunawan
edwardGunawan / MonadTransformer.scala
Created April 18, 2022 17:51
5 Anti Pattern for Writing Code in a Functional Programming Language
trait SomeInterface {
def someFunction(): EitherT[Future, Throwable, String]
}
@edwardGunawan
edwardGunawan / NestedPatternMatching.scala
Created April 18, 2022 17:49
5 Anti Pattern for Writing Code in a Functional Programming Language
def doSomething(res: Future[Either[Throwable, Option[A]]]) = res match {
case Success(a) =>
a match {
case Left(ex) =>
case Right(b) => b match {
case Some(c) =>
case None =>
}
}
@edwardGunawan
edwardGunawan / buildRunner.scala
Created April 18, 2022 17:48
5 Anti Pattern for Writing Code in a Functional Programming Language
def buildRunner
((req,Resp) => ctx.TransactionContext)
((resp, ctx.rtx.Transaction) => Final[Context])
(resp => Unit): Runner[ctx.Transaction, rtx.TransacitonResponse] = new Runner[ctx.Transaction, rtx.TransactionResponse] {
override def run((ctx.Transaction, rtx.TransactionResponse) => Response): Req => Resp = ???
}
trait Runner[T, F] {
def run((T,F) => Response): Req => Resp