diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,1 @@
+MIT License, Man. Have at it.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/Spec/Spec.hs b/Spec/Spec.hs
new file mode 100644
--- /dev/null
+++ b/Spec/Spec.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
diff --git a/Src/GameEngine.hs b/Src/GameEngine.hs
new file mode 100644
--- /dev/null
+++ b/Src/GameEngine.hs
@@ -0,0 +1,50 @@
+module GameEngine (
+    Symbol,
+    GameState(..),
+    Player(..),
+    Move(..),
+    GameActions(..),
+    GameEngine(..),
+    play
+  ) where
+
+
+type Symbol = Char
+
+
+data GameState a = GameState a
+
+
+data Player = Player Char
+
+
+data Move a = Move a
+
+
+data GameActions a b = GameActions {
+    getPlayer  :: GameState a -> Player,
+    getMoves   :: GameState a -> [Move b],
+    getResult  :: GameState a -> Move b -> GameState a,
+    isTerminal :: GameState a -> Bool,
+    getScore   :: GameState a -> Player -> Int
+  }
+
+
+data GameEngine a b = GameEngine {
+    gameActions :: GameActions a b,
+    state       :: GameState a
+  }
+
+
+play :: GameEngine a b -> Int
+play engine
+  | performWithState isTerminal engine = performWithState getScore engine $ performWithState getPlayer engine
+  | otherwise = play $ GameEngine (gameActions engine) (getNextState engine)
+
+
+getNextState :: GameEngine a b -> GameState a
+getNextState engine = performWithState getResult engine . head $ performWithState getMoves engine
+
+
+performWithState :: (GameActions a b -> GameState a -> c) -> GameEngine a b -> c
+performWithState f engine = f (gameActions engine) $ state engine
diff --git a/deterministic-game-engine.cabal b/deterministic-game-engine.cabal
new file mode 100644
--- /dev/null
+++ b/deterministic-game-engine.cabal
@@ -0,0 +1,41 @@
+-- Initial deterministic-game-engine.cabal generated by cabal init.  For
+-- further documentation, see http://haskell.org/cabal/users-guide/
+
+name:                deterministic-game-engine
+version:             0.1.0.0
+synopsis:            Simple deterministic game engine
+description:         Game engine for creating deterministic games.
+license:             MIT
+license-file:        LICENSE
+author:              Tyler Olson
+maintainer:          tydotg@gmail.com
+homepage:            https://github.com/TGOlson/deterministic-game-engine
+bug-reports:         https://github.com/TGOlson/deterministic-game-engine/issues
+-- copyright:
+category:            Game Engine
+build-type:          Simple
+-- extra-source-files:
+cabal-version:       >=1.10
+
+Source-repository head
+    Type:     git
+    Location: https://github.com/TGOlson/deterministic-game-engine
+
+
+library
+  hs-source-dirs:      Src
+  exposed-modules:     GameEngine
+
+  -- other-modules:
+  -- other-extensions:
+  build-depends:       base >=4.0 && <5.0
+  default-language:    Haskell2010
+
+test-suite test
+  hs-source-dirs:   Spec
+  main-is:          Spec.hs
+  ghc-options:      -Wall
+  type:             exitcode-stdio-1.0
+  build-depends:    base >=4.0 && <5.0,
+                    hspec >=2.1 && <2.2,
+                    deterministic-game-engine
