Skip to content

Instantly share code, notes, and snippets.

Avatar

Gary Fixler gfixler

View GitHub Profile
@gfixler
gfixler / theofthe.hs
Last active Oct 6, 2015
Militia Name Generator
View theofthe.hs
-- Clojure -> Haskell port of: https://gist.github.com/nasser/1db446782cf7f3587283
import System.Random (getStdRandom, randomR)
pick :: [a] -> IO a
pick xs = do
n <- getStdRandom $ randomR (0, length xs - 1)
return $ xs !! n
adjs = ["people's", "brave", "invincible", "unstoppable", "righteous", "just", "honorable", "terrifying", "peaceful"]
View maybeIO.hs
newtype MaybeIO a = MaybeIO (IO (Maybe a))
runMaybeIO :: MaybeIO a -> IO (Maybe a)
runMaybeIO (MaybeIO x) = x
hole = undefined
data Hole = Hole
instance Monad MaybeIO where
return x = MaybeIO (return (Just x))
View MyState.hs
data MyState s a = MyState (s -> (a, s))
get :: MyState s s
get = undefined
put :: s -> MyState s ()
put = undefined
modify :: (s -> s) -> MyState s ()
modify = undefined
View bottles.hs
bottles :: Int -> String
bottles x | x == 0 = "No more bottles"
| x == 1 = "1 more bottle"
| x < 13 = show x ++ " more bottles"
| otherwise = show x ++ " bottles"
verse :: Int -> String
verse x = line1 ++ "\n" ++ line2 ++ "\n\n"
where line1 = bottles x ++ obotw ++ " " ++ bottles x ++ ob
line2 = todpia ++ bottles (x-1) ++ obotw
@gfixler
gfixler / huff.hs
Created Jun 22, 2015
Dabblings with Huffman encoding in Haskell
View huff.hs
import Data.List (sortBy)
import Data.Ord (comparing)
import qualified Data.Map as M (Map, fromList)
data Freq a = V Int a | B Int (Freq a) (Freq a) deriving (Show)
size :: Freq a -> Int
size (V n _) = n
size (B n _ _) = n
View applbowl.hs
import Control.Applicative ((<|>))
type Bonus = Int
data Frame = Roll Int | Frame Int Int | Spare Int | Strike deriving (Show)
badnum :: Int -> Bool
badnum n = n < 0 || n > 10
strike, spare, frame :: [Int] -> Maybe (Frame, Bonus, [Int])
@gfixler
gfixler / bowling.lhs
Last active Aug 29, 2015
Uncle Bob's kata, sans OO, TDD, kata
View bowling.lhs
Here's a purely-functional take on collecting rolls (no scoring yet)
First a data type to represent the 4 states a frame can be in:
> data Frame = Roll Int | Open Int Int | Spare Int | Strike deriving (Show)
This just simplifies bounds-checks on input roll values:
> badnum :: Int -> Bool
> badnum n = n < 0 || n > 10
View 2048 generalized to monoids
import Data.List ( transpose )
import Data.Monoid ( Monoid, mempty, mappend )
import System.IO ( BufferMode(NoBuffering)
, hSetBuffering, hSetEcho
, stdin, stdout, getChar
)
import Control.Monad ( forM_ )
newtype StdVal = StdVal Int deriving (Eq)
type Board a = [[a]]
@gfixler
gfixler / gitup.sh
Last active Aug 29, 2015
Easy, initial uploading of git repos to a default location
View gitup.sh
# The gitup function lets you type `gitup` from anywhere
# in a repo to upload it to your server. It also sets it
# up as an origin remote in the local repo. This is meant
# to be used in a new repo that has no server version yet.
# Note: I have the gitup function in my ~/.bashrc file.
# Modify these two 'example.com' vars as needed:
gitup_scp='example.com:git'
gitup_root='ssh://example.com/~/git/'
View config
# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#
# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!