Skip to content

Instantly share code, notes, and snippets.

View sergey-scherbina's full-sized avatar

Scherbina Sergey sergey-scherbina

View GitHub Profile
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;
// Profunctor Optics
// http://programming-journal.org/2017/1/7/
public interface Optics {
static void main(final String[] args) {
System.out.println(Pair.<String, Optional<Pair<Integer, Boolean>>>
@sergey-scherbina
sergey-scherbina / SiteMap.scala
Created October 25, 2015 23:05
Lazy parser for site maps XML
import scala.xml.pull._
import scalaz._
import Scalaz._
trait Input[F[_]] {
type =>>[A, B] = StateT[Option, F[A], B]
def uncons[A](f: F[A]): Option[(F[A], A)]
def next[A]: (A =>> A) = StateT { uncons }
def none[A, B] = Option.empty[(F[A], B)]
@sergey-scherbina
sergey-scherbina / Monads.scala
Last active March 16, 2022 15:08
While I was doing exercises from book "Functional programming in Scala", it seems as I caught a bug in Scala's compiler. It is thrown in both 2.10.3 and 2.10.4-RC1.
object Monads {
trait Functor[F[_]] {
def map[A, B](fa: F[A])(f: A => B): F[B]
}
trait Monad[M[_]] extends Functor[M] {
self =>
def unit[A](a: => A): M[A]