Compare commits
10 commits
bbba794612
...
5c0134bd06
Author | SHA1 | Date | |
---|---|---|---|
5c0134bd06 | |||
|
fd9e5545f5 | ||
|
3a9592f958 | ||
|
10318ade8c | ||
|
da214ba266 | ||
|
4af9f88b83 | ||
|
b40c7faef0 | ||
|
c41d8aa43e | ||
|
41055a8521 | ||
|
58e9e6c16c |
28 changed files with 334 additions and 18 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,2 +1,6 @@
|
||||||
.stack-work/
|
.stack-work/
|
||||||
*~
|
*~
|
||||||
|
|
||||||
|
# ---> Nix
|
||||||
|
result
|
||||||
|
result-*
|
||||||
|
|
12
flake-module.nix
Normal file
12
flake-module.nix
Normal 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
generated
Normal file
63
flake.lock
generated
Normal 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
11
flake.nix
Normal 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);
|
||||||
|
|
||||||
|
}
|
|
@ -17,8 +17,8 @@
|
||||||
#
|
#
|
||||||
# resolver: ./custom-snapshot.yaml
|
# resolver: ./custom-snapshot.yaml
|
||||||
# resolver: https://example.com/snapshots/2018-01-01.yaml
|
# resolver: https://example.com/snapshots/2018-01-01.yaml
|
||||||
resolver:
|
resolver: lts-17.5
|
||||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml
|
# url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/15.yaml
|
||||||
|
|
||||||
# User packages to be built.
|
# User packages to be built.
|
||||||
# Various formats can be used as shown in the example below.
|
# Various formats can be used as shown in the example below.
|
||||||
|
@ -30,7 +30,8 @@ resolver:
|
||||||
# - auto-update
|
# - auto-update
|
||||||
# - wai
|
# - wai
|
||||||
packages:
|
packages:
|
||||||
- .
|
- tickLeiste
|
||||||
|
- tickLeiste-aeson
|
||||||
# Dependency packages to be pulled from upstream that are not in the resolver.
|
# Dependency packages to be pulled from upstream that are not in the resolver.
|
||||||
# These entries can reference officially published versions as well as
|
# These entries can reference officially published versions as well as
|
||||||
# forks / in-progress versions pinned to a git hash. For example:
|
# forks / in-progress versions pinned to a git hash. For example:
|
||||||
|
|
|
@ -3,11 +3,10 @@
|
||||||
# For more information, please see the documentation at:
|
# For more information, please see the documentation at:
|
||||||
# https://docs.haskellstack.org/en/stable/lock_files
|
# https://docs.haskellstack.org/en/stable/lock_files
|
||||||
|
|
||||||
packages: []
|
|
||||||
snapshots:
|
snapshots:
|
||||||
- completed:
|
- original: lts-17.5
|
||||||
size: 532383
|
completed:
|
||||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml
|
sha256: 78e8ebabf11406261abbc95b44f240acf71802630b368888f6d758de7fc3a2f7
|
||||||
sha256: 469d781ab6d2a4eceed6b31b6e4ec842dcd3cd1d11577972e86902603dce24df
|
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/17/5.yaml
|
||||||
original:
|
size: 565266
|
||||||
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/10.yaml
|
packages: []
|
||||||
|
|
2
tickLeiste-aeson/.gitignore
vendored
Normal file
2
tickLeiste-aeson/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.stack-work/
|
||||||
|
*~
|
3
tickLeiste-aeson/ChangeLog.md
Normal file
3
tickLeiste-aeson/ChangeLog.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Changelog for tickLeiste-aeson
|
||||||
|
|
||||||
|
## Unreleased changes
|
1
tickLeiste-aeson/README.md
Normal file
1
tickLeiste-aeson/README.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# tickLeiste-aeson
|
2
tickLeiste-aeson/default.nix
Normal file
2
tickLeiste-aeson/default.nix
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
{pkgs ? import <nixpkgs> {}, ...}:
|
||||||
|
pkgs.haskellPackages.callPackage ./tickLeiste-aeson.nix {}
|
41
tickLeiste-aeson/package.yaml
Normal file
41
tickLeiste-aeson/package.yaml
Normal 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
|
37
tickLeiste-aeson/src/Data/Aeson/TickLeiste.hs
Normal file
37
tickLeiste-aeson/src/Data/Aeson/TickLeiste.hs
Normal 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)
|
56
tickLeiste-aeson/tickLeiste-aeson.cabal
Normal file
56
tickLeiste-aeson/tickLeiste-aeson.cabal
Normal 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
|
12
tickLeiste-aeson/tickLeiste-aeson.nix
Normal file
12
tickLeiste-aeson/tickLeiste-aeson.nix
Normal 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
30
tickLeiste/LICENSE
Normal 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
2
tickLeiste/Setup.hs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
import Distribution.Simple
|
||||||
|
main = defaultMain
|
2
tickLeiste/default.nix
Normal file
2
tickLeiste/default.nix
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
{pkgs ? import <nixpkgs>, ...}:
|
||||||
|
pkgs.haskellPackages.callPackage ./tickLeiste.nix {}
|
|
@ -22,13 +22,13 @@ module Data.TickLeiste
|
||||||
where
|
where
|
||||||
|
|
||||||
import qualified Data.Map.Strict as M
|
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.Text as T
|
||||||
import qualified Data.UUID as U
|
import qualified Data.UUID as U
|
||||||
|
|
||||||
-- | A Tick is just a number
|
-- | A Tick is just a number
|
||||||
data Tick = Abwarten | Bereithalten | Tick Int
|
data Tick = Abwarten | Bereithalten | Tick Int
|
||||||
deriving (Show, Eq, Ord)
|
deriving (Show, Eq, Ord, Read)
|
||||||
|
|
||||||
-- | test if 'Tick' is constructed using 'Abwarten'
|
-- | test if 'Tick' is constructed using 'Abwarten'
|
||||||
isAbwarten :: Tick -> Bool
|
isAbwarten :: Tick -> Bool
|
||||||
|
@ -109,19 +109,26 @@ setPlayerTick p t tl@(TickLeiste l pl) = TickLeiste (insertPlayerToLeiste p t l'
|
||||||
return $ removePlayerFromLeiste p ot l
|
return $ removePlayerFromLeiste p ot l
|
||||||
|
|
||||||
-- TODO
|
-- TODO
|
||||||
|
-- | removes a 'Player' from the 'TickLeiste'
|
||||||
removePlayer :: Player -> TickLeiste -> 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
|
-- | convert the Tick[eiste to a list of 'Tick' and 'Player' list pairs. These list are ordered
|
||||||
toList :: TickLeiste -> [(Tick, [Player])]
|
toList :: TickLeiste -> [(Tick, [Player])]
|
||||||
toList (TickLeiste l _) = M.toAscList l
|
toList (TickLeiste l _) = M.toAscList l
|
||||||
|
|
||||||
-- | convert from list to TickLeiste, if a player is at multiple 'Tick' this returns
|
-- | convert from list to TickLeiste
|
||||||
-- 'Nothing'
|
|
||||||
|
|
||||||
-- TODO
|
-- TODO
|
||||||
fromList :: [(Tick, [Player])] -> Maybe TickLeiste
|
fromList :: [(Tick, [Player])] -> TickLeiste
|
||||||
fromList = error "not implemented"
|
fromList = error "not implemented (Franzi?)"
|
||||||
|
|
||||||
-- | convert from 'TickLeiste' to a map from 'Tick' to list of 'Player'
|
-- | convert from 'TickLeiste' to a map from 'Tick' to list of 'Player'
|
||||||
toMap :: TickLeiste -> M.Map Tick [Player]
|
toMap :: TickLeiste -> M.Map Tick [Player]
|
||||||
|
@ -131,6 +138,7 @@ toMap = leiste
|
||||||
|
|
||||||
-- it removes a player from a specific tick, if the player
|
-- it removes a player from a specific tick, if the player
|
||||||
-- wasn't at the tick it is the identity.
|
-- 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 :: Player -> Tick -> M.Map Tick [Player] -> M.Map Tick [Player]
|
||||||
removePlayerFromLeiste p t l = fromMaybe l $ do
|
removePlayerFromLeiste p t l = fromMaybe l $ do
|
||||||
list <- l M.!? t
|
list <- l M.!? t
|
||||||
|
@ -139,6 +147,9 @@ removePlayerFromLeiste p t l = fromMaybe l $ do
|
||||||
then return $ M.delete t l
|
then return $ M.delete t l
|
||||||
else return $ M.insert t list' 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 :: Player -> Tick -> M.Map Tick [Player] -> M.Map Tick [Player]
|
||||||
insertPlayerToLeiste p t l = M.insert t (M.findWithDefault [] t l ++ [p]) l
|
insertPlayerToLeiste p t l = M.insert t (M.findWithDefault [] t l ++ [p]) l
|
||||||
|
|
13
tickLeiste/stack.yaml.lock
Normal file
13
tickLeiste/stack.yaml.lock
Normal 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
2
tickLeiste/test/Spec.hs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
main :: IO ()
|
||||||
|
main = putStrLn "Test suite not yet implemented"
|
12
tickLeiste/tickLeiste.nix
Normal file
12
tickLeiste/tickLeiste.nix
Normal 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;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue