Skip to content

Instantly share code, notes, and snippets.

Leif Battermann battermann

Block or report user

Report or block battermann

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View haskell_getting_started.md
View SameGame.scala
object SameGame {
final case class Position(col: Int, row: Int)
sealed trait Color
case object Green extends Color
case object Blue extends Color
case object Red extends Color
case object Brown extends Color
case object Gray extends Color
View Music.elm
module MusicTheory.Music exposing
( Control(..)
, Division(..)
, Duration(..)
, Music(..)
, Primitive(..)
, PrimitiveGroup(..)
, TiedOrSeparate(..)
, dotted
, eighth
@battermann
battermann / fpmaxpureapp.scala
Created Aug 8, 2018
reimplementation of the program from "FP to the Max" by John De Goes (https://www.youtube.com/watch?v=sxudIMiOo68) with PureApp (https://github.com/battermann/pureapp)
View fpmaxpureapp.scala
import $ivy.`com.github.battermann::pureapp:0.6.0`
import com.github.battermann.pureapp._
import com.github.battermann.pureapp.interpreters.Terminal._
import cats.effect.IO
import cats.implicits._
import scala.util.Try
object Main extends StandardPureApp[IO] {
@battermann
battermann / Ports.elm
Created Aug 4, 2018
multi-part file upload and Progress
View Ports.elm
port module Ports exposing (Header, Part, FileUploadRequest, uploadProgress, uploadFile)
import Json.Decode exposing (Value)
port uploadFile : { elementId : ElementId, request : FileUploadRequest } -> Cmd msg
port uploadProgress : (Value -> msg) -> Sub msg
View Interval.elm
module Types.Interval exposing (IntervalSize(..), IntervalQuality(..), Interval, addIntervalSizeToLetter, noteLetterDistance, addIntervalToNote, perfectUnison, minorSecond, majorSecond, minorThird, majorThird, perfectFourth, augmentedFourth, diminishedFifth, perfectFifth, minorSixth, majorSixth, minorSeventh, majorSeventh)
import Types.Note exposing (..)
import List.Extra
type IntervalSize
= Unison
| Second
| Third
View build.sbt
javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint", "-g:none")
resolvers += Resolver.sonatypeRepo("releases")
val http4sVersion = "0.18.0"
val circeVersion = "0.9.1"
val catsEffectVersion = "0.9"
libraryDependencies ++= Seq(
"org.http4s" %% "http4s-dsl" % http4sVersion exclude ("org.typelevel", "cats-effect_2.12"),
@battermann
battermann / DiceGame.scala
Last active Nov 20, 2017
A simple dice game implemented purely functional.
View DiceGame.scala
// Note: pure != good, this is just a demo for the sake of purity. There are no claims that this is a particularly good design.
import PRNG.Seed
import cats.data.{State, StateT}
import cats.effect._
import scala.util.Try
object DiceGame extends App {
type StateIO[A] = StateT[IO, Seed, A]
@battermann
battermann / PRNG.scala
Created Oct 19, 2017
functional pseudo random number generation
View PRNG.scala
import cats.data.State
object PRNG {
final case class Seed(seed: Long) {
private lazy val next = Seed(seed * 6364136223846793005L + 1442695040888963407L)
def nextInt: (Seed, Int) = {
(next, (next.seed >>> 16).asInstanceOf[Int])
}
View CurryExtensions.tt
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
You can’t perform that action at this time.