Compare commits

...

10 commits

Author SHA1 Message Date
5c0134bd06
make it a nix flake 2023-10-30 12:12:46 +01:00
Dennis Frieberg
fd9e5545f5 added haddock for removePlayer 2022-01-03 21:25:44 +01:00
Dennis Frieberg
3a9592f958 added removePlayer 2021-03-30 14:21:28 +02:00
Dennis Frieberg
10318ade8c changed to lts version 17.5 2021-03-14 18:32:56 +01:00
Dennis Frieberg
da214ba266 added read instances 2020-09-22 17:33:15 +02:00
Dennis Frieberg
4af9f88b83 switched to newer resolver 2020-09-22 17:05:34 +02:00
Dennis Frieberg
b40c7faef0 cleaned tickLeiste-aeson Lib.hs and executable 2020-09-22 12:16:11 +02:00
Dennis Frieberg
c41d8aa43e refactored aeson instance in own package, this is now a multi-package project 2020-09-22 12:11:10 +02:00
Dennis Frieberg
41055a8521 added Aeson instances 2020-09-21 23:13:13 +02:00
Dennis Frieberg
58e9e6c16c make a good default instead of maybe 2020-09-06 02:13:02 +02:00
28 changed files with 334 additions and 18 deletions

6
.gitignore vendored
View file

@ -1,2 +1,6 @@
.stack-work/
*~
*~
# ---> Nix
result
result-*

12
flake-module.nix Normal file
View file

@ -0,0 +1,12 @@
{inputs, ...}:
{
imports = [];
systems = ["x86_64-linux"];
perSystem = {pkgs, ...} :
{
packages = rec {
tickLeiste = pkgs.haskellPackages.callPackage ./tickLeiste/tickLeiste.nix {};
tickLeiste-aeson = pkgs.haskellPackages.callPackage ./tickLeiste-aeson/tickLeiste-aeson.nix {inherit tickLeiste;};
};
};
}

63
flake.lock Normal file
View file

@ -0,0 +1,63 @@
{
"nodes": {
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1698579227,
"narHash": "sha256-KVWjFZky+gRuWennKsbo6cWyo7c/z/VgCte5pR9pEKg=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f76e870d64779109e41370848074ac4eaa1606ec",
"type": "github"
},
"original": {
"id": "flake-parts",
"type": "indirect"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1698318101,
"narHash": "sha256-gUihHt3yPD7bVqg+k/UVHgngyaJ3DMEBchbymBMvK1E=",
"owner": "NixOs",
"repo": "nixpkgs",
"rev": "63678e9f3d3afecfeafa0acead6239cdb447574c",
"type": "github"
},
"original": {
"owner": "NixOs",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"dir": "lib",
"lastModified": 1696019113,
"narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a",
"type": "github"
},
"original": {
"dir": "lib",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

11
flake.nix Normal file
View file

@ -0,0 +1,11 @@
{
description = "A very basic flake";
inputs = {
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
};
outputs = inputs@{ flake-parts, ...}:
flake-parts.lib.mkFlake { inherit inputs; } (import ./flake-module.nix);
}

View file

@ -17,8 +17,8 @@
#
# resolver: ./custom-snapshot.yaml
# resolver: https://example.com/snapshots/2018-01-01.yaml
resolver:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml
resolver: lts-17.5
# url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/15.yaml
# User packages to be built.
# Various formats can be used as shown in the example below.
@ -30,7 +30,8 @@ resolver:
# - auto-update
# - wai
packages:
- .
- tickLeiste
- tickLeiste-aeson
# Dependency packages to be pulled from upstream that are not in the resolver.
# These entries can reference officially published versions as well as
# forks / in-progress versions pinned to a git hash. For example:

View file

@ -3,11 +3,10 @@
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files
packages: []
snapshots:
- completed:
size: 532383
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml
sha256: 469d781ab6d2a4eceed6b31b6e4ec842dcd3cd1d11577972e86902603dce24df
original:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml
- original: lts-17.5
completed:
sha256: 78e8ebabf11406261abbc95b44f240acf71802630b368888f6d758de7fc3a2f7
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/17/5.yaml
size: 565266
packages: []

2
tickLeiste-aeson/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
.stack-work/
*~

View file

@ -0,0 +1,3 @@
# Changelog for tickLeiste-aeson
## Unreleased changes

View file

@ -0,0 +1 @@
# tickLeiste-aeson

View file

@ -0,0 +1,2 @@
{pkgs ? import <nixpkgs> {}, ...}:
pkgs.haskellPackages.callPackage ./tickLeiste-aeson.nix {}

View file

@ -0,0 +1,41 @@
name: tickLeiste-aeson
version: 0.1.0.0
github: "githubuser/tickLeiste-aeson"
license: BSD3
author: "Author name here"
maintainer: "example@example.com"
copyright: "2020 Author name here"
extra-source-files:
- README.md
- ChangeLog.md
# Metadata used when publishing your package
# synopsis: Short description of your package
# category: Web
# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description: Please see the README on GitHub at <https://github.com/githubuser/tickLeiste-aeson#readme>
dependencies:
- base >= 4.7 && < 5
- tickLeiste
- uuid
- aeson
- text
library:
source-dirs: src
tests:
tickLeiste-aeson-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- tickLeiste-aeson

View file

@ -0,0 +1,37 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Data.Aeson.TickLeiste
( JSONRequest (..),
JSONEvent (..),
)
where
import Data.Aeson
import Data.Aeson.TH
import qualified Data.Text as T
import Data.TickLeiste
import qualified Data.UUID as U
$(deriveJSON defaultOptions {sumEncoding = defaultTaggedObject {tagFieldName = "tickType", contentsFieldName = "tickValue"}} ''Tick)
data JSONRequest
= SetPlayerTickR {sptRplayerUUID :: U.UUID, sptRtick :: Tick}
| AddPlayerTickR {aptRplayerName :: T.Text, aptRtick :: Tick}
| InitializeTickLeisteR {itlRtickLeiste :: [(Tick, [T.Text])]}
| TickLeisteR
| ChangeNameR {cnaRplayerUUID :: U.UUID, cnaRplayerName :: T.Text}
| RemovePlayerR {rmpRplayerUUID :: U.UUID}
deriving (Show, Eq, Read)
$(deriveJSON defaultOptions {sumEncoding = defaultTaggedObject {tagFieldName = "requestType"}, fieldLabelModifier = drop 4} ''JSONRequest)
data JSONEvent
= SetPlayerTickE {sptEplayerUUID :: U.UUID, sptEtick :: Tick}
| AddPlayerTickE {aptEplayerUUID :: U.UUID, aptEplayerName :: T.Text, aptEtick :: Tick}
| InitializeTickLeisteE {itlEtickLeiste :: [(Tick, [(U.UUID, T.Text)])]}
| ChangeNameE {cnaEplayerUUID :: U.UUID, cnaEplayerName :: T.Text}
| RemovePlayerE {rmpEplayerUUID :: U.UUID}
deriving (Show, Eq, Read)
$(deriveJSON defaultOptions {sumEncoding = defaultTaggedObject {tagFieldName = "eventType"}, fieldLabelModifier = drop 4} ''JSONEvent)

View file

@ -0,0 +1,56 @@
cabal-version: 1.12
-- This file has been generated from package.yaml by hpack version 0.34.2.
--
-- see: https://github.com/sol/hpack
name: tickLeiste-aeson
version: 0.1.0.0
description: Please see the README on GitHub at <https://github.com/githubuser/tickLeiste-aeson#readme>
homepage: https://github.com/githubuser/tickLeiste-aeson#readme
bug-reports: https://github.com/githubuser/tickLeiste-aeson/issues
author: Author name here
maintainer: example@example.com
copyright: 2020 Author name here
license: BSD3
license-file: LICENSE
build-type: Simple
extra-source-files:
README.md
ChangeLog.md
source-repository head
type: git
location: https://github.com/githubuser/tickLeiste-aeson
library
exposed-modules:
Data.Aeson.TickLeiste
other-modules:
Paths_tickLeiste_aeson
hs-source-dirs:
src
build-depends:
aeson
, base >=4.7 && <5
, text
, tickLeiste
, uuid
default-language: Haskell2010
test-suite tickLeiste-aeson-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_tickLeiste_aeson
hs-source-dirs:
test
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
aeson
, base >=4.7 && <5
, text
, tickLeiste
, tickLeiste-aeson
, uuid
default-language: Haskell2010

View file

@ -0,0 +1,12 @@
{ mkDerivation, aeson, base, hpack, lib, text, tickLeiste, uuid }:
mkDerivation {
pname = "tickLeiste-aeson";
version = "0.1.0.0";
src = ./.;
libraryHaskellDepends = [ aeson base text tickLeiste uuid ];
libraryToolDepends = [ hpack ];
testHaskellDepends = [ aeson base text tickLeiste uuid ];
prePatch = "hpack";
homepage = "https://github.com/githubuser/tickLeiste-aeson#readme";
license = lib.licenses.bsd3;
}

30
tickLeiste/LICENSE Normal file
View file

@ -0,0 +1,30 @@
Copyright Author name here (c) 2020
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.

2
tickLeiste/Setup.hs Normal file
View file

@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain

2
tickLeiste/default.nix Normal file
View file

@ -0,0 +1,2 @@
{pkgs ? import <nixpkgs>, ...}:
pkgs.haskellPackages.callPackage ./tickLeiste.nix {}

View file

@ -22,13 +22,13 @@ module Data.TickLeiste
where
import qualified Data.Map.Strict as M
import Data.Maybe (fromMaybe)
import Data.Maybe (fromMaybe,maybe)
import qualified Data.Text as T
import qualified Data.UUID as U
-- | A Tick is just a number
data Tick = Abwarten | Bereithalten | Tick Int
deriving (Show, Eq, Ord)
deriving (Show, Eq, Ord, Read)
-- | test if 'Tick' is constructed using 'Abwarten'
isAbwarten :: Tick -> Bool
@ -109,19 +109,26 @@ setPlayerTick p t tl@(TickLeiste l pl) = TickLeiste (insertPlayerToLeiste p t l'
return $ removePlayerFromLeiste p ot l
-- TODO
-- | removes a 'Player' from the 'TickLeiste'
removePlayer :: Player -> TickLeiste -> TickLeiste
removePlayer = error "removePlayer not yet implemented (Franzi?)"
removePlayer p tl@(TickLeiste {leiste = l, player = pm}) = TickLeiste l' pm'
where
pt = getPlayerTick p tl
l' = maybe
l
(flip (removePlayerFromLeiste p) l)
pt
pm' = removePlayerFromPlayerMap p pm
-- | convert the Tick[eiste to a list of 'Tick' and 'Player' list pairs. These list are ordered
toList :: TickLeiste -> [(Tick, [Player])]
toList (TickLeiste l _) = M.toAscList l
-- | convert from list to TickLeiste, if a player is at multiple 'Tick' this returns
-- 'Nothing'
-- | convert from list to TickLeiste
-- TODO
fromList :: [(Tick, [Player])] -> Maybe TickLeiste
fromList = error "not implemented"
fromList :: [(Tick, [Player])] -> TickLeiste
fromList = error "not implemented (Franzi?)"
-- | convert from 'TickLeiste' to a map from 'Tick' to list of 'Player'
toMap :: TickLeiste -> M.Map Tick [Player]
@ -131,6 +138,7 @@ toMap = leiste
-- it removes a player from a specific tick, if the player
-- wasn't at the tick it is the identity.
-- TODO this can be written more beautifully with something like M.update
removePlayerFromLeiste :: Player -> Tick -> M.Map Tick [Player] -> M.Map Tick [Player]
removePlayerFromLeiste p t l = fromMaybe l $ do
list <- l M.!? t
@ -139,6 +147,9 @@ removePlayerFromLeiste p t l = fromMaybe l $ do
then return $ M.delete t l
else return $ M.insert t list' l
removePlayerFromPlayerMap :: Player -> M.Map Player Tick -> M.Map Player Tick
removePlayerFromPlayerMap = M.delete
insertPlayerToLeiste :: Player -> Tick -> M.Map Tick [Player] -> M.Map Tick [Player]
insertPlayerToLeiste p t l = M.insert t (M.findWithDefault [] t l ++ [p]) l

View file

@ -0,0 +1,13 @@
# This file was autogenerated by Stack.
# You should not edit this file by hand.
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files
packages: []
snapshots:
- completed:
size: 532383
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml
sha256: 469d781ab6d2a4eceed6b31b6e4ec842dcd3cd1d11577972e86902603dce24df
original:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml

2
tickLeiste/test/Spec.hs Normal file
View file

@ -0,0 +1,2 @@
main :: IO ()
main = putStrLn "Test suite not yet implemented"

12
tickLeiste/tickLeiste.nix Normal file
View file

@ -0,0 +1,12 @@
{ mkDerivation, base, containers, hpack, lib, text, uuid }:
mkDerivation {
pname = "tickLeiste";
version = "0.1.0.0";
src = ./.;
libraryHaskellDepends = [ base containers text uuid ];
libraryToolDepends = [ hpack ];
testHaskellDepends = [ base containers text uuid ];
prePatch = "hpack";
homepage = "https://github.com/githubuser/tickLeiste#readme";
license = lib.licenses.bsd3;
}