Skip to content

Instantly share code, notes, and snippets.

@battermann
battermann / Siren.fs
Last active January 27, 2017 16:49
An F# representation of the Siren media type https://github.com/kevinswiber/siren
module Siren
open System
open Hypermedia.Models
type Rel = Rel of string
type Title = Title of string
type Class = Class of string
type MediaType = MediaType of string
<#@ 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.
//
@battermann
battermann / PRNG.scala
Created October 19, 2017 18:57
functional pseudo random number generation
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])
}
@battermann
battermann / DiceGame.scala
Last active November 20, 2017 10:13
A simple dice game implemented purely functional.
// 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]
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 / Interval.elm
Created June 17, 2018 19:21
Intervals in 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
@battermann
battermann / Ports.elm
Created August 4, 2018 10:59
multi-part file upload and Progress
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
@battermann
battermann / fpmaxpureapp.scala
Created August 8, 2018 18:37
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)
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 / Music.elm
Created October 27, 2018 21:02
Music Elm
module MusicTheory.Music exposing
( Control(..)
, Division(..)
, Duration(..)
, Music(..)
, Primitive(..)
, PrimitiveGroup(..)
, TiedOrSeparate(..)
, dotted
, eighth
@battermann
battermann / SameGame.scala
Last active April 17, 2023 13:47
SameGame
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