Skip to content

Instantly share code, notes, and snippets.

View globulon's full-sized avatar
💭
I may be slow to respond.

patterngazer globulon

💭
I may be slow to respond.
View GitHub Profile
trait SValidation[A] {
def apply(seq: A): DomainValidation[A]
def map[B](f: A => B) = new SValidation[B] {
def apply(seq: B): DomainValidation[B] = null
// self.apply(seq) map { validSequence => validSequence map f }
}
def flatMap[B](f: A => SValidation[B]) = new SValidation[B] {
def apply(seq: B): DomainValidation[B] = null
trait SValidation[A] {
self =>
def apply(seq: Seq[A]): DomainValidation[Seq[A]]
def map[B](f: A => B) = new SValidation[B] {
def apply(seq: Seq[B]): DomainValidation[Seq[B]] = null
// self.apply(seq) map { validSequence => validSequence map f }
}
def flatMap[B](f: A => SValidation[B]) = new SValidation[B] {
def apply(seq: Seq[B]): DomainValidation[Seq[B]] = null
trait SValidation[A] {
self =>
def apply(seq: Seq[A]): DomainValidation[Seq[A]]
def map[B](f: A => B) = new SValidation[B] {
def apply(seq: Seq[B]): DomainValidation[Seq[B]] = null
// self.apply(seq) map { validSequence => validSequence map f }
}
}
@globulon
globulon / Invalid.scala
Created May 22, 2012 09:13
Invalid definition
trait SequenceValidation[A, B] {
self =>
def apply(seq: Seq[A]): DomainValidation[Seq[B]]
def map[C](f: B => C) = new SequenceValidation[A, C] {
def apply(seq: Seq[A]): DomainValidation[Seq[C]] =
self.apply(seq) map { validSequence => validSequence map f }
}
def flatMap[C](f: B => SequenceValidation[A, C]) = new SequenceValidation[A, C] {
@globulon
globulon / AlternateIteratee.scala
Created March 31, 2012 18:18
Alternate Iteratees
def drop1Keep1[E]: IterV[E, Option[E]] = for {
_: Unit <- drop[E](1)
h: Option[E] <- head[E]
} yield h
def repeat[E, A](iter: IterV[E, A], n: Int): IterV[E, List[A]] = {
type P[X] = IterV[E, X]
implicit val appl = iterateesToApplicative[E]()
replicateM[A, P, List](iter, n)
@globulon
globulon / UseSequence.scala
Created March 31, 2012 18:15
Use of sequence
def replicateM[T, M[_]: Applicative, C[_]: MonoidC : Traverse](a: M[T], n: Int): M[C[T]] = {
implicitly[Traverse[C]].sequence(a.replicate(n))
}
@globulon
globulon / toReplicate.scala
Created March 31, 2012 18:12
toReplicate
implicit def toReplicable[T](value: T) = Replicable(value)
implicit def toReplicableM[T, M[_]](m: M[T]) = ReplicableM(m)
trait SemiGroup[T] {
def add(x: T, y: T): T
}
trait Monoid[T] extends SemiGroup[T] {
def unit: T
}
trait MonoidC[L[X]] {
def add[T](k: L[T], l: L[T]): L[T]
package com.promindis.patterns
final case class Replicable[T](value: T) {
def replicate[L[_]](n: Int)(implicit m: MonoidC[L]): L[T] = {
def replicateIter(acc: L[T], rest: Int): L[T] = {
if (rest == 0) acc
else replicateIter(m.add(acc, m(value)), rest - 1)
}
replicateIter(m.unit, n)
}
@globulon
globulon / drop1keep1.scala
Created March 31, 2012 17:39
drop1keep1 iteratee
def drop1Keep1[E]: IterV[E, Option[E]] = for {
_: Unit <- drop[E](1)
h: Option[E] <- head[E]
} yield h