Skip to content

Instantly share code, notes, and snippets.

› scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).
Type in expressions to have them evaluated.
Type :help for more information.
scala> :paste
// Entering paste mode (ctrl-D to finish)
trait Monad[F[_]] {
def pure[A](a: A): F[A]
@mpilquist
mpilquist / extract.scala
Created November 24, 2015 15:59
Unwrapping an hlist
package foo
import shapeless._
import shapeless.poly._
trait Extract[F[_]] {
def extract[A](fa: F[A]): A
def extractAll[K <: HList](k: K)(implicit m: ops.hlist.Mapper[Extract.extract.type, K]) =
Extract.extractAll[F, K](k)(this, m)
}
package mf
import cats._
import cats.laws._
trait MonadFix[F[_]] extends Monad[F] {
def mfix[A](f: Eval[A] => F[A]): F[A]
}
object MonadFix {
[error] /Users/mpilquist/Development/projects/simulacrum/core/src/main/scala/simulacrum/typeclass.scala:58: type mismatch;
[error] found : String
[error] required: Int
[error] def freshName(prefix: String) = c.freshName(prefix)
[error] ^
[error] /Users/mpilquist/Development/projects/simulacrum/core/src/main/scala/simulacrum/typeclass.scala:288: not found: value typeNames
[error] tparamtparams.find { _.name == typeNames.WILDCARD } match {
[error] ^
[error] /Users/mpilquist/Development/projects/simulacrum/core/src/main/scala/simulacrum/typeclass.scala:295: not found: value typeNames
[error] case Ident(typeNames.WILDCARD) => super.transform(Ident(liftedTypeArgName))
@mpilquist
mpilquist / inv.scala
Last active August 29, 2015 14:28
Port of Travis Brown's covariant sequence for HLists: http://stackoverflow.com/questions/16127360/sequencing-an-hlist
import shapeless._
import shapeless.ops.hlist._
import UnaryTCConstraint._
object inv {
trait Zip[F[_]] {
def pure[A](a: A): F[A]
def zip[A, B](fa: F[A], fb: F[B]): F[(A, B)]
}
@mpilquist
mpilquist / .gitignore
Last active August 29, 2015 14:27
Simulacrum Example
target
@mpilquist
mpilquist / example.scala
Created July 30, 2015 01:55
Using scala-reflect to desugar
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> showCode(reify {
| for{
| x <- 1 to 5
| _ = print("hi")
| } print(x)
| }.tree)
res1: String =
@mpilquist
mpilquist / ex.scala
Created June 19, 2015 20:11
Example of summoning an HList of type class instances with Shapeless
import shapeless._
package object ex {
implicit class TypeClassHListOps[L <: HList](val self: L) extends AnyVal {
def summon[TC[_]](implicit op: HListTypeClassSummoner[TC, L]) = op.instance
}
trait HListTypeClassSummoner[TC[_], L <: HList] {
type Out <: HList
object CaseClassToMapStringOfString {
import shapeless._
import shapeless.labelled._
import syntax.singleton._
import record._
import ops.record._
import syntax.singleton._
case class Color(value: String)
case class ChartOptions(stringOpt: String, intOpt: Int, colorOpt: Color)
@mpilquist
mpilquist / local.scala
Created April 3, 2015 01:06
Non-working macro for scoping implicits
def local[A](implicits: Any*)(f: => A): A = macro localMacro[A]
def localMacro[A](c: Context)(implicits: c.Expr[Any]*)(f: c.Expr[A]): c.Expr[A] = {
import c.universe._
val implicitVals = implicits.map { imp =>
val name = TermName(c.freshName())
q"implicit val $name = $imp"
}
c.Expr[A](q"{ ..$implicitVals; $f }")
}