Skip to content

Instantly share code, notes, and snippets.

@Odomontois
Forked from folex/shapeless_tags_fun.scala
Created May 25, 2017 04:19
Show Gist options
  • Save Odomontois/ee91f5718ffc444fa23bd4b07e031441 to your computer and use it in GitHub Desktop.
Save Odomontois/ee91f5718ffc444fa23bd4b07e031441 to your computer and use it in GitHub Desktop.
shapeless_tags_fun.scala
import cats.data.Ior
object UserRelationsT {
import shapeless.tag
import tag.@@
import shapeless.Unwrapped
trait IsFollowerTag
type IsFollower = Boolean @@ IsFollowerTag
def isFollower(b: Boolean): IsFollower = tag[IsFollowerTag][Boolean](b)
trait IsFollowingTag
type IsFollowing = Boolean @@ IsFollowingTag
def isFollowing(b: Boolean): IsFollowing = tag[IsFollowingTag][Boolean](b)
type Rel = Ior[IsFollowing, IsFollower]
implicit class OptionTagOps[A](opt: Option[A]) {
def getOrElseT[T](default: T)(implicit unwrapped: Unwrapped.Aux[A, T]): A = {
unwrapped.wrap(opt.map(unwrapped.unwrap).getOrElse(default))
}
}
val example: IsFollower = Ior.left(isFollower(true)).left.getOrElseT(false)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment