Skip to content

Instantly share code, notes, and snippets.

module Main exposing (main)
import Bootstrap.CDN as CDN
import Bootstrap.Card as Card
import Bootstrap.Card.Block as Block
import Bootstrap.Form as Form
import Bootstrap.Form.Input as Input
import Bootstrap.Grid as Grid
import Bootstrap.Utilities.Spacing as Spacing
import Browser
@battermann
battermann / index.js
Created July 21, 2019 14:29
Web Midi with WebMidi.js
import WebMidi from 'webmidi'
var btn1 = document.createElement('BUTTON')
btn1.innerHTML = 'send to all channels'
btn1.onclick = function () { play(song, 'all') }
document.body.appendChild(btn1)
var btn2 = document.createElement('BUTTON')
btn2.innerHTML = 'only one channel'
btn2.onclick = function () { play(song, 1) }
@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
@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 / 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 / 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 / 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
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 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]