Merge branch 'master' into uni2work

This commit is contained in:
Gregor Kleen 2021-06-27 13:08:21 +02:00
commit fda3a000f9
23 changed files with 218 additions and 86 deletions

1
.envrc Normal file
View File

@ -0,0 +1 @@
use flake

View File

@ -10,12 +10,12 @@ dist: trusty
language: c
services:
- redis-server
- redis-server
addons:
apt:
packages:
- libgmp-dev
- libgmp-dev
postgresql: "9.3"
cache:
@ -25,8 +25,7 @@ cache:
matrix:
include:
- env: STACKARGS="--resolver=lts-11"
- env: STACKARGS="--resolver=lts-12"
- env: STACKARGS="--resolver=lts-15"
- env: STACKARGS="--resolver=nightly"
allow_failures:
- env: STACKARGS="--resolver=nightly"

View File

@ -1,3 +1,6 @@
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
module Model where
import ClassyPrelude.Yesod

44
flake.lock Normal file
View File

@ -0,0 +1,44 @@
{
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1619345332,
"narHash": "sha256-qHnQkEp1uklKTpx3MvKtY6xzgcqXDsz5nLilbbuL+3A=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "2ebf2558e5bf978c7fb8ea927dfaed8fefab2e28",
"type": "github"
},
"original": {
"owner": "numtide",
"ref": "master",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1620323686,
"narHash": "sha256-+gfcE3YTGl+Osc8HzOUXSFO8/0PAK4J8ZxCXZ4hjXHI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "dfacb8329b2236688b9a1e705116203a213b283a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

30
flake.nix Normal file
View File

@ -0,0 +1,30 @@
{
inputs = {
nixpkgs = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "master";
};
flake-utils = {
type = "github";
owner = "numtide";
repo = "flake-utils";
ref = "master";
};
};
outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem
(system:
let pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
in {
devShell = pkgs.mkShell {
name = "uni2work-serversession";
nativeBuildInputs = with pkgs.haskellPackages; [ stack ];
};
}
);
}

8
nixpkgs.nix Normal file
View File

@ -0,0 +1,8 @@
import (
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
in fetchTarball {
url = "https://api.github.com/repos/NixOS/nixpkgs/tarball/${lock.nodes.nixpkgs.locked.rev}";
sha256 = lock.nodes.nixpkgs.locked.narHash;
}
)

View File

@ -0,0 +1,3 @@
# 1.0.4
* bump acid-state to 0.16

View File

@ -1,5 +1,6 @@
cabal-version: >= 1.10
name: serversession-backend-acid-state
version: 1.0.3
version: 1.0.4
license: MIT
license-file: LICENSE
author: Felipe Lessa <felipe.lessa@gmail.com>
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
synopsis: Storage backend for serversession using acid-state.
category: Web
stability: Stable
cabal-version: >= 1.8
build-type: Simple
homepage: https://github.com/yesodweb/serversession
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-acid-state>
@ -19,10 +19,11 @@ flag lib-Werror
manual: True
library
default-language: Haskell2010
hs-source-dirs: src
build-depends:
base == 4.*
, acid-state == 0.16.*
, acid-state >= 0.16
, containers
, mtl
, safecopy >= 0.8 && <0.11
@ -32,7 +33,7 @@ library
exposed-modules:
Web.ServerSession.Backend.Acid
Web.ServerSession.Backend.Acid.Internal
extensions:
default-extensions:
ConstraintKinds
DeriveDataTypeable
FlexibleContexts
@ -47,6 +48,7 @@ library
test-suite tests
default-language: Haskell2010
type: exitcode-stdio-1.0
hs-source-dirs: tests
build-depends:
@ -57,7 +59,7 @@ test-suite tests
, serversession
, serversession-backend-acid-state
main-is: Main.hs
extensions:
default-extensions:
CPP
ghc-options: -Wall -threaded "-with-rtsopts=-N -s -M1G -c" -rtsopts
if flag(lib-Werror)

View File

@ -109,7 +109,7 @@ instance SafeCopy SS.SessionMap where
-- | We can't @deriveSafeCopy 0 'base ''SS.SessionId@ as
-- otherwise we'd require an unneeded @SafeCopy sess@.
instance SafeCopy (SS.SessionId sess) where
instance Typeable sess => SafeCopy (SS.SessionId sess) where
putCopy = contain . safePut . SSI.unS
getCopy = contain $ SSI.S <$> safeGet
@ -118,7 +118,7 @@ instance SafeCopy (SS.SessionId sess) where
-- | We can't @deriveSafeCopy 0 'base ''SS.Session@ due to the
-- required context.
instance SafeCopy (SS.Decomposed sess) => SafeCopy (SS.Session sess) where
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (SS.Session sess) where
putCopy (SS.Session key authId data_ createdAt accessedAt) = contain $ do
put_t <- getSafePut
safePut key
@ -140,7 +140,7 @@ instance SafeCopy (SS.Decomposed sess) => SafeCopy (SS.Session sess) where
-- | We can't @deriveSafeCopy 0 'base ''ServerSessionAcidState@ due
-- to the required context.
instance SafeCopy (SS.Decomposed sess) => SafeCopy (ServerSessionAcidState sess) where
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (ServerSessionAcidState sess) where
putCopy (ServerSessionAcidState sits aits) = contain $ do
safePut (HM.toList sits)
safePut (HM.toList aits)
@ -279,31 +279,27 @@ data DeleteAllSessionsOfAuthId sess = DeleteAllSessionsOfAuthId SS.AuthId derivi
data InsertSession sess = InsertSession (SS.Session sess) deriving (Typeable)
data ReplaceSession sess = ReplaceSession (SS.Session sess) deriving (Typeable)
instance SafeCopy (GetSession sess) where
instance Typeable sess => SafeCopy (GetSession sess) where
putCopy (GetSession v) = contain $ safePut v
getCopy = contain $ GetSession <$> safeGet
errorTypeName _ = "GetSession"
instance SafeCopy (DeleteSession sess) where
instance Typeable sess => SafeCopy (DeleteSession sess) where
putCopy (DeleteSession v) = contain $ safePut v
getCopy = contain $ DeleteSession <$> safeGet
errorTypeName _ = "DeleteSession"
instance SafeCopy (DeleteAllSessionsOfAuthId sess) where
instance Typeable sess => SafeCopy (DeleteAllSessionsOfAuthId sess) where
putCopy (DeleteAllSessionsOfAuthId v) = contain $ safePut v
getCopy = contain $ DeleteAllSessionsOfAuthId <$> safeGet
errorTypeName _ = "DeleteAllSessionsOfAuthId"
instance SafeCopy (SS.Decomposed sess) => SafeCopy (InsertSession sess) where
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (InsertSession sess) where
putCopy (InsertSession v) = contain $ safePut v
getCopy = contain $ InsertSession <$> safeGet
errorTypeName _ = "InsertSession"
instance SafeCopy (SS.Decomposed sess) => SafeCopy (ReplaceSession sess) where
instance (Typeable sess, SafeCopy (SS.Decomposed sess)) => SafeCopy (ReplaceSession sess) where
putCopy (ReplaceSession v) = contain $ safePut v
getCopy = contain $ ReplaceSession <$> safeGet

View File

@ -1,3 +1,5 @@
1.0.5
* bump persistent to 2.10
1.0.4
* Default auth id to NULL to fix a MySQL bug.
1.0.3

View File

@ -1,5 +1,6 @@
cabal-version: >= 1.10
name: serversession-backend-persistent
version: 1.0.4
version: 1.0.5
license: MIT
license-file: LICENSE
author: Felipe Lessa <felipe.lessa@gmail.com>
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
synopsis: Storage backend for serversession using persistent and an RDBMS.
category: Web
stability: Stable
cabal-version: >= 1.8
build-type: Simple
homepage: https://github.com/yesodweb/serversession
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-persistent>
@ -19,6 +19,7 @@ flag lib-Werror
manual: True
library
default-language: Haskell2010
hs-source-dirs: src
build-depends:
base == 4.*
@ -27,7 +28,7 @@ library
, bytestring
, cereal >= 0.4
, path-pieces
, persistent >= 2.1
, persistent >= 2.10
, tagged >= 0.7
, text
, time
@ -39,7 +40,7 @@ library
Web.ServerSession.Backend.Persistent
Web.ServerSession.Backend.Persistent.Internal.Impl
Web.ServerSession.Backend.Persistent.Internal.Types
extensions:
default-extensions:
DeriveDataTypeable
EmptyDataDecls
FlexibleContexts
@ -62,6 +63,7 @@ library
test-suite tests
default-language: Haskell2010
type: exitcode-stdio-1.0
hs-source-dirs: tests
build-depends:
@ -79,7 +81,7 @@ test-suite tests
, serversession
, serversession-backend-persistent
extensions:
default-extensions:
OverloadedStrings
TemplateHaskell
main-is: Main.hs

View File

@ -96,6 +96,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
["Eq", "Ord", "Show", "Typeable"]
M.mempty
False
Nothing
where
pfd :: P.EntityField (PersistentSession sess) typ -> P.FieldDef
pfd = P.persistFieldDef
@ -142,8 +143,10 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
(P.SqlOther "SqlType unset for key")
[]
True
P.NoReference]
P.NoReference
Nothing]
[]))
Nothing
persistFieldDef PersistentSessionKey
= P.FieldDef
(P.HaskellName "key")
@ -153,6 +156,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
["maxlen=30"]
True
P.NoReference
Nothing
persistFieldDef PersistentSessionAuthId
= P.FieldDef
(P.HaskellName "authId")
@ -162,6 +166,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
["Maybe", "default=NULL"]
True
P.NoReference
Nothing
persistFieldDef PersistentSessionSession
= P.FieldDef
(P.HaskellName "session")
@ -171,6 +176,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
[]
True
P.NoReference
Nothing
persistFieldDef PersistentSessionCreatedAt
= P.FieldDef
(P.HaskellName "createdAt")
@ -180,6 +186,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
[]
True
P.NoReference
Nothing
persistFieldDef PersistentSessionAccessedAt
= P.FieldDef
(P.HaskellName "accessedAt")
@ -189,6 +196,7 @@ instance forall sess. P.PersistFieldSql (Decomposed sess) => P.PersistEntity (Pe
[]
True
P.NoReference
Nothing
persistIdField = PersistentSessionId

View File

@ -1,3 +1,5 @@
1.0.4
* bump hedis to 0.13
1.0.3
* Allow hedis-0.10
1.0.2

View File

@ -1,5 +1,6 @@
cabal-version: >= 1.10
name: serversession-backend-redis
version: 1.0.3
version: 1.0.4
license: MIT
license-file: LICENSE
author: Felipe Lessa <felipe.lessa@gmail.com>
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
synopsis: Storage backend for serversession using Redis.
category: Web
stability: Stable
cabal-version: >= 1.8
build-type: Simple
homepage: https://github.com/yesodweb/serversession
description: API docs and the README are available at <http://www.stackage.org/package/serversession-backend-redis>
@ -23,11 +23,12 @@ flag lib-Werror
manual: True
library
default-language: Haskell2010
hs-source-dirs: src
build-depends:
base == 4.*
, bytestring
, hedis < 0.11
, hedis < 0.13
, path-pieces
, tagged >= 0.7
, text
@ -43,7 +44,7 @@ library
exposed-modules:
Web.ServerSession.Backend.Redis
Web.ServerSession.Backend.Redis.Internal
extensions:
default-extensions:
CPP
DeriveDataTypeable
FlexibleContexts
@ -60,6 +61,7 @@ library
test-suite tests
default-language: Haskell2010
type: exitcode-stdio-1.0
hs-source-dirs: tests
build-depends:

View File

@ -1,3 +1,4 @@
cabal-version: >= 1.10
name: serversession-frontend-snap
version: 1.0.1
license: MIT
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
synopsis: Snap bindings for serversession.
category: Web
stability: Stable
cabal-version: >= 1.8
build-type: Simple
homepage: https://github.com/yesodweb/serversession
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-snap>
@ -20,6 +20,7 @@ flag lib-Werror
library
default-language: Haskell2010
hs-source-dirs: src
build-depends:
base == 4.*
@ -37,7 +38,7 @@ library
exposed-modules:
Web.ServerSession.Frontend.Snap
Web.ServerSession.Frontend.Snap.Internal
extensions:
default-extensions:
DeriveDataTypeable
FlexibleContexts
OverloadedStrings

View File

@ -1,3 +1,4 @@
cabal-version: >= 1.10
name: serversession-frontend-wai
version: 1.0
license: MIT
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
synopsis: wai-session bindings for serversession.
category: Web
stability: Stable
cabal-version: >= 1.8
build-type: Simple
homepage: https://github.com/yesodweb/serversession
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-wai>
@ -19,6 +19,7 @@ flag lib-Werror
manual: True
library
default-language: Haskell2010
hs-source-dirs: src
build-depends:
base >= 4.6 && < 5
@ -38,7 +39,7 @@ library
exposed-modules:
Web.ServerSession.Frontend.Wai
Web.ServerSession.Frontend.Wai.Internal
extensions:
default-extensions:
FlexibleContexts
OverloadedStrings
TypeFamilies

View File

@ -1,3 +1,4 @@
cabal-version: >= 1.10
name: serversession-frontend-yesod
version: 1.0
license: MIT
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
synopsis: Yesod bindings for serversession.
category: Web
stability: Stable
cabal-version: >= 1.8
build-type: Simple
homepage: https://github.com/yesodweb/serversession
description: API docs and the README are available at <http://www.stackage.org/package/serversession-frontend-yesod>
@ -19,6 +19,7 @@ flag lib-Werror
manual: True
library
default-language: Haskell2010
hs-source-dirs: src
build-depends:
base == 4.*
@ -38,7 +39,7 @@ library
exposed-modules:
Web.ServerSession.Frontend.Yesod
Web.ServerSession.Frontend.Yesod.Internal
extensions:
default-extensions:
FlexibleContexts
OverloadedStrings
TypeFamilies

View File

@ -0,0 +1,2 @@
# 1.0.2
* add persistent-test to deps

View File

@ -1,5 +1,6 @@
cabal-version: >= 1.10
name: serversession
version: 1.0.1
version: 1.0.2
license: MIT
license-file: LICENSE
author: Felipe Lessa <felipe.lessa@gmail.com>
@ -7,7 +8,6 @@ maintainer: Michael Xavier <michael@michaelxavier.net>
synopsis: Secure, modular server-side sessions.
category: Web
stability: Stable
cabal-version: >= 1.8
build-type: Simple
homepage: https://github.com/yesodweb/serversession
description: API docs and the README are available at <http://www.stackage.org/package/serversession>
@ -19,16 +19,18 @@ flag lib-Werror
manual: True
library
default-language: Haskell2010
hs-source-dirs: src
build-depends:
base == 4.*
, aeson
, base64-bytestring == 1.0.*
, base64-bytestring >= 1.0 && < 1.3
, bytestring
, data-default
, hashable
, nonce == 1.0.*
, path-pieces
, persistent-test
, text
, time
, transformers
@ -37,7 +39,7 @@ library
Web.ServerSession.Core
Web.ServerSession.Core.Internal
Web.ServerSession.Core.StorageTests
extensions:
default-extensions:
DeriveDataTypeable
FlexibleContexts
OverloadedStrings
@ -53,6 +55,7 @@ library
test-suite tests
default-language: Haskell2010
type: exitcode-stdio-1.0
hs-source-dirs: tests
build-depends:
@ -64,7 +67,7 @@ test-suite tests
, hspec >= 2.1 && < 3
, QuickCheck
, serversession
extensions:
default-extensions:
DeriveDataTypeable
FlexibleContexts
OverloadedStrings

View File

@ -10,6 +10,7 @@ module Web.ServerSession.Core.StorageTests
import Control.Applicative as A
import Control.Exception (Exception)
import Control.Monad
import DataTypeTest (roundUTCTime)
import Web.ServerSession.Core.Internal
import qualified Crypto.Nonce as N
@ -173,8 +174,8 @@ allStorageTests storage it runIO parallel _shouldBe shouldReturn shouldThrow = d
{ sessionKey = sid
, sessionAuthId = Nothing
, sessionData = SessionMap $ HM.fromList vals
, sessionCreatedAt = now
, sessionAccessedAt = now
, sessionCreatedAt = roundUTCTime now
, sessionAccessedAt = roundUTCTime now
}
ver2 = session { sessionData = SessionMap HM.empty }
run (getSession storage sid) `shouldReturn` Nothing
@ -223,8 +224,8 @@ generateSession gen hasAuthId = do
{ sessionKey = sid
, sessionAuthId = authId
, sessionData = SessionMap data_
, sessionCreatedAt = TI.addUTCTime (-1000) now
, sessionAccessedAt = now
, sessionCreatedAt = roundUTCTime $ TI.addUTCTime (-1000) now
, sessionAccessedAt = roundUTCTime $ now
}
data HasAuthId = HasAuthId | NoAuthId

16
stack.nix Normal file
View File

@ -0,0 +1,16 @@
{ ghc, nixpkgs ? import ./nixpkgs.nix }:
let
# haskellPackages = import ./stackage.nix { inherit nixpkgs; };
haskellPackages = pkgs.haskellPackages;
inherit (nixpkgs {}) pkgs;
in pkgs.haskell.lib.buildStackProject {
inherit ghc;
inherit (haskellPackages) stack;
name = "stackenv";
buildInputs = (with pkgs;
[ postgresql zlib libsodium gmp llvm_9
]) ++ (with haskellPackages;
[ yesod-bin happy alex
]);
}

View File

@ -1,4 +1,18 @@
resolver: lts-15.0
flags:
serversession-backend-acid-state:
lib-Werror: true
serversession-frontend-wai:
lib-Werror: true
serversession-backend-persistent:
lib-Werror: true
serversession:
lib-Werror: true
serversession-backend-redis:
lib-Werror: true
serversession-frontend-yesod:
lib-Werror: true
serversession-frontend-snap:
lib-Werror: true
packages:
- serversession
- serversession-backend-acid-state
@ -8,25 +22,16 @@ packages:
- serversession-frontend-wai
- serversession-frontend-yesod
- examples/serversession-example-yesod-persistent
flags:
serversession:
lib-Werror: true
serversession-backend-acid-state:
lib-Werror: true
serversession-backend-persistent:
lib-Werror: true
serversession-backend-redis:
lib-Werror: true
serversession-frontend-snap:
lib-Werror: true
serversession-frontend-wai:
lib-Werror: true
serversession-frontend-yesod:
lib-Werror: true
extra-deps:
- acid-state-0.16.0
- snap-1.1.1.0
- heist-1.1
- map-syntax-0.3
- pwstore-fast-2.4.4
- xmlhtml-0.2.5.2
- snap-1.1.3.0@sha256:0c0814d2ab1c3d5f22cef4615b2913ded18e87710ea6febdbe6e3ab8d9838735,8872
- acid-state-0.16.0@sha256:a5640fd8d99bdb5f152476a2ae56cc8eb81864b280c8ec7d1387e81296ed844d,6190
- heist-1.1.0.1@sha256:7355cf8c1a7ef84c0c800c0539f7b99e7e540cace697238009a2dea1f05231f1,9311
- map-syntax-0.3@sha256:ca8b449615fa57419c16a5e98844624a6ac758692b87b3cfae8c74c87c56f1b2,2420
- pwstore-fast-2.4.4@sha256:9b6a37510d8b9f37f409a8ab3babac9181afcaaa3fce8ba1c131a7ed3de30698,1351
- xmlhtml-0.2.5.2@sha256:3f0990f725551985d777e8edb5563fe99aee998f1fde6a7633f720f76df54701,46997
resolver: lts-16.31
nix:
packages: []
pure: false
shell-file: ./stack.nix
add-gc-roots: true

View File

@ -4,51 +4,51 @@
# https://docs.haskellstack.org/en/stable/lock_files
packages:
- completed:
hackage: snap-1.1.3.0@sha256:0c0814d2ab1c3d5f22cef4615b2913ded18e87710ea6febdbe6e3ab8d9838735,8872
pantry-tree:
size: 5743
sha256: 804f55a8cab81e720547308e799243e81f43e089b860c0d3160a938cad86ed0d
original:
hackage: snap-1.1.3.0@sha256:0c0814d2ab1c3d5f22cef4615b2913ded18e87710ea6febdbe6e3ab8d9838735,8872
- completed:
hackage: acid-state-0.16.0@sha256:a5640fd8d99bdb5f152476a2ae56cc8eb81864b280c8ec7d1387e81296ed844d,6190
pantry-tree:
size: 13678
sha256: c6e4b7f00d2a500e6286beafe3a2da7ba898a9ea31f5744df57cdce8a8f5890f
original:
hackage: acid-state-0.16.0
hackage: acid-state-0.16.0@sha256:a5640fd8d99bdb5f152476a2ae56cc8eb81864b280c8ec7d1387e81296ed844d,6190
- completed:
hackage: snap-1.1.1.0@sha256:3b6301b66f244074d1d7a87173cc70871df1df84b3a86bba5e996422d5e73f45,9093
pantry-tree:
size: 5743
sha256: 23a8899b96ab2dd080328b35f047c057c06ff1dc31a73b724a7a69ba3f5db374
original:
hackage: snap-1.1.1.0
- completed:
hackage: heist-1.1@sha256:20187de15ef630f8f6debc1cc22cacefb55ddf8864749294bfe2b79a831cad8d,8722
hackage: heist-1.1.0.1@sha256:7355cf8c1a7ef84c0c800c0539f7b99e7e540cace697238009a2dea1f05231f1,9311
pantry-tree:
size: 7354
sha256: 977c0818628cc92775afbf063032e308e55e29e85eaf6289e955dcdcd80b563f
sha256: a2635ed49de6debaf8b98189989f83ab58dcc125c6ae8e57f6fe0903bc7fa8ff
original:
hackage: heist-1.1
hackage: heist-1.1.0.1@sha256:7355cf8c1a7ef84c0c800c0539f7b99e7e540cace697238009a2dea1f05231f1,9311
- completed:
hackage: map-syntax-0.3@sha256:ca8b449615fa57419c16a5e98844624a6ac758692b87b3cfae8c74c87c56f1b2,2420
pantry-tree:
size: 558
sha256: c196bee0433f9540e4251ebd1be06d802ff7cc4931e6f0aedc38babd28683a3c
original:
hackage: map-syntax-0.3
hackage: map-syntax-0.3@sha256:ca8b449615fa57419c16a5e98844624a6ac758692b87b3cfae8c74c87c56f1b2,2420
- completed:
hackage: pwstore-fast-2.4.4@sha256:9b6a37510d8b9f37f409a8ab3babac9181afcaaa3fce8ba1c131a7ed3de30698,1351
pantry-tree:
size: 270
sha256: ff4a44ede62515efe5cd366a5803f7183c811c4a0cf56eea88da94181c4844c0
original:
hackage: pwstore-fast-2.4.4
hackage: pwstore-fast-2.4.4@sha256:9b6a37510d8b9f37f409a8ab3babac9181afcaaa3fce8ba1c131a7ed3de30698,1351
- completed:
hackage: xmlhtml-0.2.5.2@sha256:3f0990f725551985d777e8edb5563fe99aee998f1fde6a7633f720f76df54701,46997
pantry-tree:
size: 61835
sha256: bb1bd95db3738e18d112bbc9724510ee64a51b7eda61494507f4957c5e2281f6
original:
hackage: xmlhtml-0.2.5.2
hackage: xmlhtml-0.2.5.2@sha256:3f0990f725551985d777e8edb5563fe99aee998f1fde6a7633f720f76df54701,46997
snapshots:
- completed:
size: 488576
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/15/0.yaml
sha256: e4b6a87b47ec1cf63a7f1a0884a3b276fce2b0d174a10e8753c4f618e7983568
original: lts-15.0
size: 534126
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/31.yaml
sha256: 637fb77049b25560622a224845b7acfe81a09fdb6a96a3c75997a10b651667f6
original: lts-16.31