Skip to content

Instantly share code, notes, and snippets.

@derekmorr
derekmorr / gist:350553c45beac5ff0241
Last active August 29, 2015 14:14
F# examples translated to Scala
val r = (42, "Hello")
val (num, str) = r
case class Product(name: String, price: Float)
val p = Product("Test", 128.8f)
val p2 = p.copy(name = "Another")
val p3 = Product("Test", 128.8f)
// structural comparision of case classes
p == p3
@derekmorr
derekmorr / gist:dd2ae28fdd5aced2d727
Created July 9, 2015 03:34
Structural typing in Scala
case class Circle(radius: Double) {
def area = radius * radius * Math.PI
}
case class Rectangle(side: Double) {
def area = side * side
}
case class Triangle(base: Double, height: Double) {
def area = 0.5d * base * height
@derekmorr
derekmorr / week2.fs
Last active July 10, 2016 12:32
F# MOOC week 2 assignment
open System
let readConsoleValue prompt =
printf "%s: " prompt
Console.ReadLine()
let classifyAge name age =
if age >= 20 then
sprintf "%s is no longer a teenager" name
elif (age < 20 && age > 13) then
open System
let GoldenTuples numbers =
let GoldenRatio = (1.0 + Math.Sqrt(5.0)) / 2.0
seq {
for n in numbers do
yield (n, (float n) * GoldenRatio)
}
let rec GetNumber numbers =
@derekmorr
derekmorr / gun.fs
Created October 29, 2015 01:12
EdX F# class - module 4 (pattern matching)
open System
type GunRecord =
{ xcoord : float
ycoord : float
speed : float
distance : float
name : String }
type GunResult =
@derekmorr
derekmorr / DSLFSM.hs
Created July 10, 2016 12:29
Haskell implementation of text processing DSL
module DSLFSM where
import Data.Char (toLower, toUpper)
-- a DSL for basic text processing
-- and a FSM for implementing that DSL.
-- adapted to Haskell from https://www.youtube.com/watch?v=7D9GE3-o54o
data MachineState = Normal | Comment | Upper | Lower
@derekmorr
derekmorr / Chapter11Phone.hs
Created July 12, 2016 17:25
Solutions to Phone exercise from Chapter 11 of Haskellbook
module Chapter11Phone where
import Data.Char (isLetter, isNumber, isUpper, toLower)
import Data.List (group, sort)
data CharType = Letter Char
| Number Char
| Punctuation Char
deriving (Eq, Show)
@derekmorr
derekmorr / Chapter11Tree.hs
Last active July 13, 2016 22:45
Haskebook Chapter 11 tree
module Chapter11Tree where
data OperatingSystem = Linux
| OpenBSD
| Mac
| Windows
deriving (Eq, Show)
data ProgrammingLanguage = Haskell
| Agda
import org.scalacheck.Gen.choose
import org.scalatest.prop.GeneratorDrivenPropertyChecks
import org.scalatest.{WordSpec, MustMatchers}
class TruncateTest extends WordSpec with MustMatchers with GeneratorDrivenPropertyChecks {
def truncate(str: String, length: Int): String = {
if (str.length < length)
str
else if (length < 3 || str.length < 3)
@derekmorr
derekmorr / main.rs
Created October 4, 2016 17:53
fold examples for Tom
use std::cmp;
fn sum(numbers: Vec<i32>) -> i32 {
numbers.iter().fold(0, |total, num| total + num)
}
fn biggest_word(words: Vec<&str>) -> usize {
words.iter().fold(0, |length, word| cmp::max(length, word.chars().count()))
}