Skip to content

Instantly share code, notes, and snippets.

View Fristi's full-sized avatar

Mark Fristi

View GitHub Profile
@Fristi
Fristi / Multiplexing.scala
Created April 17, 2015 19:32
Multiplexing requests/response with scalaz(-stream)
package nl.mdj.fpinscala
import java.net.InetSocketAddress
import java.nio.channels.AsynchronousChannelGroup
import java.util.concurrent.atomic.AtomicInteger
import scodec.bits.ByteVector
import scala.annotation.tailrec
import scalaz.netty.Netty
@Fristi
Fristi / Aggregate.hs
Last active November 6, 2022 20:50
DDD/Event Sourcing in Haskell. Implemented an aggregate as a type class and type families to couple event, command and error types specific to the aggregate. Errors are returned by using Either (Error e) (Event e). Applying Applicative Functors fits here well to sequentially check if the command suffice.
{-# LANGUAGE TypeFamilies #-}
import Data.Function (on)
import Control.Applicative
data EventData e = EventData {
eventId :: Int,
body :: Event e
}
@Fristi
Fristi / Service.scala
Created November 7, 2018 07:13
Http4s refined endpoint with tests
import cats.Show
import cats.data.EitherT
import cats.effect.{IO, Sync}
import eu.timepit.refined.api.Refined
import eu.timepit.refined.collection.NonEmpty
import eu.timepit.refined.types.numeric.PosInt
import io.chrisdavenport.log4cats.Logger
import io.chrisdavenport.log4cats.slf4j.Slf4jLogger
import io.circe._
import io.circe.refined._
@Fristi
Fristi / CsvParser.cs
Last active August 10, 2021 20:24
CSV Parser in C#, mapping via CSV headers and C# attributes.
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public sealed class CsvEntryAttribute : Attribute
{
public string HeaderName { get; set; }
}
public class CsvParser
{
private class CsvDescriptor
{
@Fristi
Fristi / DiffableDerivation.scala
Created November 28, 2018 07:37
specs2 `Diffable` magnolia derivation
import magnolia.{CaseClass, Magnolia, SealedTrait}
import org.specs2.matcher.describe._
import scala.language.experimental.macros
object DiffableDerivation {
/** binds the Magnolia macro to this derivation object */
implicit def genDiffable[T]: Diffable[T] = macro Magnolia.gen[T]
@Fristi
Fristi / profiling.txt
Created May 6, 2020 09:34
scalac-profiling
This file has been truncated, but you can view the full file.
Compiling postgres (14 Scala sources)
[E-1] xsbt-analyzer : 1 spans, ()6.485ms (0.0%)
[E-1] silencerCheckUnused : 1 spans, ()0.083ms (0.0%)
[E-1] scalacenter-profiling : 1 spans, ()3581.37ms (5.1%)
[E-1] semanticdb-jvm : 1 spans, ()0.271ms (0.0%)
[E-1] jvm : 1 spans, ()977.622ms (1.4%)
[E-1] delambdafy : 1 spans, ()100.727ms (0.1%)
[E-1] cleanup : 1 spans, ()96.443ms (0.1%)
[E-1] mixin : 1 spans, ()94.082ms (0.1%)
[E-1] flatten : 1 spans, ()60.325ms (0.1%)
@Fristi
Fristi / OT2.scala
Last active April 28, 2020 15:59
Improved zio-telemetry OpenTracing
package zio.telemetry.opentracing
import java.util.concurrent.TimeUnit
import io.opentracing.{Span, Tracer}
import zio.clock.Clock
import zio._
object OpenTracing2 {
type OT = Has[Service]
@Fristi
Fristi / FreeActor.scala
Last active April 25, 2019 13:12
Free Monad operating on Akka actors
package nl.mdj.fpinscala
import akka.actor.{Actor, ActorRef, ActorSystem, Props}
import akka.pattern.ask
import akka.util.Timeout
import nl.mdj.fpinscala.KeyValueStore.{KvS, ListKeys}
import scala.concurrent.duration._
import scala.concurrent.{ExecutionContext, Await, Future}
import scalaz.std.list._
@Fristi
Fristi / ScalaJsElmExample.scala
Last active November 14, 2018 16:54
A simple examle of Scala.js ala Elm
import japgolly.scalajs.react.vdom.all._
import japgolly.scalajs.react.{ReactElement, SyntheticEvent}
import monifu.reactive.Observable
import monifu.reactive.subjects.BehaviorSubject
object StateExample {
//---------------------------------
// (VIEW)-MODEL
//---------------------------------
@Fristi
Fristi / Xenolittle.scala
Created September 5, 2018 22:29
Simple Schema implementation derived from Xenomorph to practice around with all the concepts
import jason.HFunctor.HAlgebra
import scalaz._
import scalaz.Scalaz._
import io.circe._
trait HFunctor[F[_[_], _]] {
def hfmap[M[_], N[_]](nt: M ~> N): F[M, ?] ~> F[N, ?]
}
object HFunctor {