summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2016-02-17 05:33:34 +0100
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2016-02-17 05:33:34 +0100
commit938721877d1a4d8d0c304ef43572856b1a39970a (patch)
tree7b87df76a72ae1e6b2f00242ab77034616848b50
Monad transformers.
-rw-r--r--.gitignore1
-rw-r--r--LICENSE30
-rw-r--r--Setup.hs2
-rw-r--r--app/Main.hs6
-rw-r--r--rougelike.cabal46
-rw-r--r--src/Lib.hs48
-rw-r--r--stack.yaml35
-rw-r--r--test/Spec.hs2
8 files changed, 170 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6c392f0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.stack-work/*
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..fc03544
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright Author name here (c) 2016
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of Author name here nor the names of other
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
index 0000000..9a994af
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/app/Main.hs b/app/Main.hs
new file mode 100644
index 0000000..9d74405
--- /dev/null
+++ b/app/Main.hs
@@ -0,0 +1,6 @@
+module Main where
+
+import Lib
+
+main :: IO ()
+main = undefined
diff --git a/rougelike.cabal b/rougelike.cabal
new file mode 100644
index 0000000..b9a2c82
--- /dev/null
+++ b/rougelike.cabal
@@ -0,0 +1,46 @@
+name: rougelike
+version: 0.1.0.0
+synopsis: Initial project template from stack
+description: Please see README.md
+homepage: http://github.com/githubuser/rougelike#readme
+license: BSD3
+license-file: LICENSE
+author: Author name here
+maintainer: example@example.com
+copyright: 2016 Author Here
+category: Web
+build-type: Simple
+-- extra-source-files:
+cabal-version: >=1.10
+
+library
+ hs-source-dirs: src
+ exposed-modules: Lib
+ build-depends:
+ base
+ , lens
+ , data-default
+ , transformers
+ , mtl
+ default-language: Haskell2010
+
+executable rougelike-exe
+ hs-source-dirs: app
+ main-is: Main.hs
+ ghc-options: -threaded -rtsopts -with-rtsopts=-N
+ build-depends: base
+ , rougelike
+ default-language: Haskell2010
+
+test-suite rougelike-test
+ type: exitcode-stdio-1.0
+ hs-source-dirs: test
+ main-is: Spec.hs
+ build-depends: base
+ , rougelike
+ ghc-options: -threaded -rtsopts -with-rtsopts=-N
+ default-language: Haskell2010
+
+source-repository head
+ type: git
+ location: https://github.com/githubuser/rougelike
diff --git a/src/Lib.hs b/src/Lib.hs
new file mode 100644
index 0000000..9748aed
--- /dev/null
+++ b/src/Lib.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+module Lib where
+
+import Control.Lens (makeLenses)
+import Control.Monad.Identity (Identity(..))
+import Control.Monad.Reader (ReaderT(..), runReaderT)
+import Control.Monad.Reader.Class (MonadReader(..))
+import Control.Monad.State.Class (MonadState(..))
+import Control.Monad.State.Strict (StateT(..), evalStateT)
+import Data.Default (Default(..))
+
+data Position = Position { _x :: Int, _y :: Int }
+ deriving (Show, Read)
+instance Default Position where
+ def = Position 0 0
+makeLenses ''Position
+
+data Player = Player {
+ position :: Position}
+ deriving (Show, Read)
+instance Default Player where
+ def = Player { position = def }
+makeLenses ''Player
+
+newtype Config = Config String
+ deriving (Show)
+
+data World = World {
+ player :: Player}
+ deriving (Show, Read)
+instance Default World where
+ def = World { player = def }
+makeLenses ''World
+
+newtype App a = App {
+ runApp :: StateT World (ReaderT Config Identity) a}
+ deriving ( Applicative
+ , Functor
+ , Monad
+ , MonadState World
+ , MonadReader Config
+ )
+
+evalApp :: App a -> World -> Config -> a
+evalApp f world config =
+ runIdentity (runReaderT (evalStateT (runApp f) world) config)
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
index 0000000..28ee63e
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,35 @@
+# For more information, see: http://docs.haskellstack.org/en/stable/yaml_configuration.html
+
+# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)
+resolver: lts-5.3
+
+# Local packages, usually specified by relative directory name
+packages:
+- '.'
+
+# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
+extra-deps: []
+
+# Override default flag values for local packages and extra-deps
+flags: {}
+
+# Extra package databases containing global packages
+extra-package-dbs: []
+
+# Control whether we use the GHC we find on the path
+# system-ghc: true
+
+# Require a specific version of stack, using version ranges
+# require-stack-version: -any # Default
+# require-stack-version: >= 1.0.0
+
+# Override the architecture used by stack, especially useful on Windows
+# arch: i386
+# arch: x86_64
+
+# Extra directories used by stack for building
+# extra-include-dirs: [/path/to/dir]
+# extra-lib-dirs: [/path/to/dir]
+
+# Allow a newer minor version of GHC than the snapshot specifies
+# compiler-check: newer-minor
diff --git a/test/Spec.hs b/test/Spec.hs
new file mode 100644
index 0000000..cd4753f
--- /dev/null
+++ b/test/Spec.hs
@@ -0,0 +1,2 @@
+main :: IO ()
+main = putStrLn "Test suite not yet implemented"