Skip to content

Instantly share code, notes, and snippets.

@mossprescott
Created October 13, 2016 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mossprescott/0591131f7a5070eba785bc1d4f398228 to your computer and use it in GitHub Desktop.
Save mossprescott/0591131f7a5070eba785bc1d4f398228 to your computer and use it in GitHub Desktop.
Following ShowT
@typeclass trait RenderTreeT[T[_[_]]] {
def render[F[_]](tf: T[F])(implicit del: Delay[RenderTree, F]): RenderedTree
def renderTree[F[_]](delay: Delay[RenderTree, F]): RenderTree[T[F]] =
RenderTree.make(render(_)(delay))
}
object RenderTreeT {
implicit val fix: RenderTreeT[Fix] = new RenderTreeT[Fix] {
def render[F[_]](tf: Fix[F])(implicit del: Delay[RenderTree, F]): RenderedTree =
del(renderTree[F](del)).render(tf.unFix)
}
}
@mossprescott
Copy link
Author

This would replace RenderTree.recursive, in a way that allows it to be used to constrain T as in def foo[T[_[_]]: RenderTreeT].

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment