Skip to content

Instantly share code, notes, and snippets.

Avatar

Mark Seemann ploeh

View GitHub Profile
@ploeh
ploeh / Tuple2.fs
Last active Sep 8, 2020
Helpful functions for working with pairs in F#
View Tuple2.fs
module Tuple2
let replicate x = x, x
let curry f x y = f (x, y)
let uncurry f (x, y) = f x y
let swap (x, y) = (y, x)
@ploeh
ploeh / ApiModel.hs
Last active Jun 22, 2020
Handling a reservation request in Haskell. Proof of concept
View ApiModel.hs
module ApiModel where
import Data.Time (ZonedTime(..), parseTimeM, defaultTimeLocale, iso8601DateFormat)
data ReservationRendition = ReservationRendition
{ rDate :: String
, rName :: String
, rEmail :: String
, rQuantity :: Int }
deriving (Eq, Show, Read)
View Main.purs
module Main where
import Control.Monad.Eff (Eff)
import Data.Maybe (fromJust)
import Data.Tuple (Tuple(..))
import Graphics.Canvas (CANVAS, Context2D, closePath, getCanvasElementById,
getContext2D, lineTo, moveTo, setLineWidth, strokePath)
import Math (cos, pi, sin)
import Partial.Unsafe (unsafePartial)
import Prelude (Unit, bind, discard, negate, void, ($), (*), (+), (-), (/), (<=))
@ploeh
ploeh / Maybe.cs
Last active Sep 8, 2019
Skeleton Maybe in C#
View Maybe.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ploeh.Samples.ChainOfResponsibility
{
public class Maybe<T>
{
@ploeh
ploeh / Safefs.hs
Last active Aug 6, 2018
Safe head function using Either in Haskell
View Safefs.hs
safeHead [] = Left "The list was empty. No head is available."
safeHead xs = Right . head $ xs
-- Sample usage from GHCI:
--
-- *Safefs> safeHead [1..3]
-- Right 1
-- *Safefs> safeHead [7]
-- Right 7
-- *Safefs> safeHead [2, 3]
View RadioCode.hs
module RadioCode where
import Control.Arrow
import Data.Char
import Data.List
import Data.Maybe
icao :: [(Char, String)]
icao =
(head &&& delete ',')
@ploeh
ploeh / Foo.cs
Created Jan 26, 2018
Enumerating over generic and non-generic enumerators in C#
View Foo.cs
using System;
using System.Collections;
using System.Collections.Generic;
public class Foo : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
yield return 42;
yield return 1337;
View Main.hs
-- Translation to Haskell of:
-- http://ccd-school.de/2017/06/stratified-design-over-layered-design
-- I've deliberately translated each method to a function, in order to show the
-- similarity. Some functions, like extractWords, are redundant (already built
-- in) or almost too simple to get their own function.
module Main where
import Data.List (partition)
View PollingConsumer.hs
{-# LANGUAGE DeriveFunctor #-}
module PollingConsumer where
import Data.Time.Clock
import Control.Monad.Trans.Free (Free, FreeF(..), liftF, runFree)
import Control.Concurrent (threadDelay)
import System.Random (getStdRandom, random, randomR)
import Text.Printf (printf)
-- "Types prevent typos" - https://twitter.com/hmemcpy/status/867647943108681728
@ploeh
ploeh / FractalTree.fsx
Created Jun 6, 2017
Fractal tree in F#. Our solution from dojo in Copenhagen, 2017-05-30
View FractalTree.fsx
open System
open System.Drawing
open System.Windows.Forms
// Create a form to display the graphics
let width, height = 500, 500
let form = new Form(Width = width, Height = height)
let box = new PictureBox(BackColor = Color.White, Dock = DockStyle.Fill)
let image = new Bitmap(width, height)
let graphics = Graphics.FromImage(image)
You can’t perform that action at this time.