diff --git a/examples/Turtle.hs b/examples/Turtle.hs new file mode 100644 index 0000000..2b4aaf3 --- /dev/null +++ b/examples/Turtle.hs @@ -0,0 +1,64 @@ +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE DeriveDataTypeable #-} +-- | A simple Turtle-graphics demonstration for modeling the location of a turtle. +-- +-- This is based on the code presented by Seth Tisue at the Boston Area Scala +-- Enthusiasts meeting during his lens talk. +-- +-- Usage: +-- +-- > def & forward 10 & down & tColor .~ red & turn (pi/2) & forward 5 +-- Turtle {_tPoint = Point {__x = 5.0, __y = 10.0} +-- , _tColor = Color {__r = 255, __g = 0, __b = 0} +-- , _heading = 1.5707963267948966 +-- , _penDown = True} + +module Turtle where + +import Lens.Simple +import Data.Default + +data Point = Point + { __x, __y :: Double + } deriving (Eq,Show) + +makeLenses ''Point + +instance Default Point where + def = Point def def + +data Color = Color + { __r, __g, __b :: Int + } deriving (Eq,Show) + +makeLenses ''Color + +red :: Color +red = Color 255 0 0 + +instance Default Color where + def = Color def def def + +data Turtle = Turtle + { _tPoint :: Point + , _tColor :: Color + , _heading :: Double + , _penDown :: Bool + } deriving (Eq,Show) + +makeLenses ''Turtle + +instance Default Turtle where + def = Turtle def def def False + +forward :: Double -> Turtle -> Turtle +forward d t = + t & tPoint._y +~ d * cos (t^.heading) + & tPoint._x +~ d * sin (t^.heading) + +turn :: Double -> Turtle -> Turtle +turn d = heading +~ d + +up, down :: Turtle -> Turtle +up = penDown .~ False +down = penDown .~ True \ No newline at end of file diff --git a/upload.sh b/upload.sh new file mode 100755 index 0000000..b1995a5 --- /dev/null +++ b/upload.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -e + +if [ "$#" -ne 1 ]; then + echo "Usage: scripts/hackage-docs.sh HACKAGE_USER" + exit 1 +fi + +user=$1 + +cabal_file=$(find . -maxdepth 1 -name "*.cabal" -print -quit) +if [ ! -f "$cabal_file" ]; then + echo "Run this script in the top-level package directory" + exit 1 +fi + +pkg=$(awk -F ":[[:space:]]*" 'tolower($1)=="name" { print $2 }' < "$cabal_file") +ver=$(awk -F ":[[:space:]]*" 'tolower($1)=="version" { print $2 }' < "$cabal_file") + +if [ -z "$pkg" ]; then + echo "Unable to determine package name" + exit 1 +fi + +if [ -z "$ver" ]; then + echo "Unable to determine package version" + exit 1 +fi + +echo "Detected package: $pkg-$ver" + +dir=$(mktemp -d build-docs.XXXXXX) +trap 'rm -r "$dir"' EXIT + +cabal haddock --hyperlink-source --html-location='/package/$pkg-$version/docs' --contents-location='/package/$pkg-$version' + +cp -R dist/doc/html/$pkg/ $dir/$pkg-$ver-docs + +tar cvz -C $dir --format=ustar -f $dir/$pkg-$ver-docs.tar.gz $pkg-$ver-docs + +curl -X PUT \ + -H 'Content-Type: application/x-tar' \ + -H 'Content-Encoding: gzip' \ + -u "$user" \ + --data-binary "@$dir/$pkg-$ver-docs.tar.gz" \ + "https://hackage.haskell.org/package/$pkg-$ver/docs" \ No newline at end of file