on master help sign in
Updated to lts-20.18
afb9f9biko
examples/grenade-examples.cabal+6−5
unifiedsplit
@@ -26,7 +26,7 @@ executable feedforward
26 , bytestring
26 , bytestring
27 , cereal
27 , cereal
28 , either
28 , either
29− , optparse-applicative >= 0.13 && < 0.17
29+ , optparse-applicative >= 0.13 && < 0.18
30 , text == 1.2.*
30 , text == 1.2.*
31 , mtl >= 2.2.1 && < 2.3
31 , mtl >= 2.2.1 && < 2.3
32 , hmatrix
32 , hmatrix
@@ -42,7 +42,7 @@ executable mnist
42 , grenade
42 , grenade
43 , attoparsec
43 , attoparsec
44 , either
44 , either
45− , optparse-applicative >= 0.13 && < 0.17
45+ , optparse-applicative >= 0.13 && < 0.18
46 , text == 1.2.*
46 , text == 1.2.*
47 , mtl >= 2.2.1 && < 2.3
47 , mtl >= 2.2.1 && < 2.3
48 , hmatrix >= 0.18 && < 0.21
48 , hmatrix >= 0.18 && < 0.21
@@ -61,7 +61,7 @@ executable gan-mnist
61 , bytestring
61 , bytestring
62 , cereal
62 , cereal
63 , either
63 , either
64− , optparse-applicative >= 0.13 && < 0.17
64+ , optparse-applicative >= 0.13 && < 0.18
65 , text == 1.2.*
65 , text == 1.2.*
66 , mtl >= 2.2.1 && < 2.3
66 , mtl >= 2.2.1 && < 2.3
67 , hmatrix >= 0.18 && < 0.21
67 , hmatrix >= 0.18 && < 0.21
@@ -78,7 +78,7 @@ executable recurrent
78 , grenade
78 , grenade
79 , attoparsec
79 , attoparsec
80 , either
80 , either
81− , optparse-applicative >= 0.13 && < 0.17
81+ , optparse-applicative >= 0.13 && < 0.18
82 , text == 1.2.*
82 , text == 1.2.*
83 , mtl >= 2.2.1 && < 2.3
83 , mtl >= 2.2.1 && < 2.3
84 , hmatrix >= 0.18 && < 0.21
84 , hmatrix >= 0.18 && < 0.21
@@ -96,13 +96,14 @@ executable shakespeare
96 , bytestring
96 , bytestring
97 , cereal
97 , cereal
98 , either
98 , either
99− , optparse-applicative >= 0.13 && < 0.17
99+ , optparse-applicative >= 0.13 && < 0.18
100 , text == 1.2.*
100 , text == 1.2.*
101 , mtl >= 2.2.1 && < 2.3
101 , mtl >= 2.2.1 && < 2.3
102 , hmatrix >= 0.18 && < 0.21
102 , hmatrix >= 0.18 && < 0.21
103 , transformers
103 , transformers
104 , semigroups
104 , semigroups
105 , singletons
105 , singletons
106+ , singletons-base
106 , vector
107 , vector
107 , MonadRandom
108 , MonadRandom
108 , containers
109 , containers
examples/main/shakespeare.hs+2−7
@@ -14,22 +14,15 @@ import Data.Char ( isUpper, toUpper, toLower )
14import Data.List ( foldl' )
14import Data.List ( foldl' )
15import Data.Maybe ( fromMaybe )
15import Data.Maybe ( fromMaybe )
16
16
17−#if ! MIN_VERSION_base(4,13,0)
18−import Data.Semigroup ( (<>) )
19−#endif
20
17
21import qualified Data.Vector as V
18import qualified Data.Vector as V
22import Data.Vector ( Vector )
19import Data.Vector ( Vector )
23
20
24import qualified Data.Map as M
21import qualified Data.Map as M
25−#if ! MIN_VERSION_base(4,13,0)
26−import Data.Proxy ( Proxy (..) )
27−#endif
28
22
29import qualified Data.ByteString as B
23import qualified Data.ByteString as B
30import Data.Serialize
24import Data.Serialize
31
25
32−import Data.Singletons.Prelude
33import GHC.TypeLits
26import GHC.TypeLits
34
27
35import Numeric.LinearAlgebra.Static ( konst )
28import Numeric.LinearAlgebra.Static ( konst )
@@ -41,6 +34,8 @@ import Grenade.Recurrent
41import Grenade.Utils.OneHot
34import Grenade.Utils.OneHot
42
35
43import System.IO.Unsafe ( unsafeInterleaveIO )
36import System.IO.Unsafe ( unsafeInterleaveIO )
37+import Data.Proxy
38+import Prelude.Singletons
44
39
45-- The defininition for our natural language recurrent network.
40-- The defininition for our natural language recurrent network.
46-- This network is able to learn and generate simple words in
41-- This network is able to learn and generate simple words in
grenade.cabal+2−1
@@ -38,7 +38,7 @@ source-repository head
38library
38library
39 build-depends:
39 build-depends:
40 base >= 4.8 && < 5
40 base >= 4.8 && < 5
41− , bytestring == 0.10.*
41+ , bytestring >= 0.10.0
42 , containers >= 0.5 && < 0.7
42 , containers >= 0.5 && < 0.7
43 , cereal >= 0.5 && < 0.6
43 , cereal >= 0.5 && < 0.6
44 , deepseq >= 1.4 && < 1.5
44 , deepseq >= 1.4 && < 1.5
@@ -48,6 +48,7 @@ library
48 -- Versions of singletons are *tightly* coupled with the
48 -- Versions of singletons are *tightly* coupled with the
49 -- GHC version so its fine to drop version bounds.
49 -- GHC version so its fine to drop version bounds.
50 , singletons
50 , singletons
51+ , singletons-base
51 , vector >= 0.11 && < 0.13
52 , vector >= 0.11 && < 0.13
52
53
53 ghc-options:
54 ghc-options:
src/Grenade/Core/Network.hs+1−1
@@ -34,7 +34,6 @@ module Grenade.Core.Network (
34import Control.Monad.Random ( MonadRandom )
34import Control.Monad.Random ( MonadRandom )
35
35
36import Data.Singletons
36import Data.Singletons
37−import Data.Singletons.Prelude
38import Data.Serialize
37import Data.Serialize
39
38
40#if MIN_VERSION_base(4,9,0)
39#if MIN_VERSION_base(4,9,0)
@@ -44,6 +43,7 @@ import Data.Kind (Type)
44import Grenade.Core.Layer
43import Grenade.Core.Layer
45import Grenade.Core.LearningParameters
44import Grenade.Core.LearningParameters
46import Grenade.Core.Shape
45import Grenade.Core.Shape
46+import Prelude.Singletons
47
47
48-- | Type of a network.
48-- | Type of a network.
49--
49--
src/Grenade/Core/Runner.hs+2−1
@@ -13,11 +13,12 @@ module Grenade.Core.Runner (
13 , runNet
13 , runNet
14 ) where
14 ) where
15
15
16−import Data.Singletons.Prelude
17
16
18import Grenade.Core.LearningParameters
17import Grenade.Core.LearningParameters
19import Grenade.Core.Network
18import Grenade.Core.Network
20import Grenade.Core.Shape
19import Grenade.Core.Shape
20+import Data.Singletons
21+import Prelude.Singletons
21
22
22-- | Perform reverse automatic differentiation on the network
23-- | Perform reverse automatic differentiation on the network
23-- for the current input and expected output.
24-- for the current input and expected output.
src/Grenade/Core/Shape.hs+16−31
@@ -21,35 +21,20 @@ Stability : experimental
21module Grenade.Core.Shape (
21module Grenade.Core.Shape (
22 S (..)
22 S (..)
23 , Shape (..)
23 , Shape (..)
24−#if MIN_VERSION_singletons(2,6,0)
25 , SShape (..)
24 , SShape (..)
26−#else
27− , Sing (..)
28−#endif
29−
30 , randomOfShape
25 , randomOfShape
31 , fromStorable
26 , fromStorable
32 ) where
27 ) where
33
28
34import Control.DeepSeq (NFData (..))
29import Control.DeepSeq (NFData (..))
35import Control.Monad.Random ( MonadRandom, getRandom )
30import Control.Monad.Random ( MonadRandom, getRandom )
36−
37−#if MIN_VERSION_base(4,13,0)
38import Data.Kind (Type)
31import Data.Kind (Type)
39−#endif
40import Data.Proxy
32import Data.Proxy
41import Data.Serialize
33import Data.Serialize
42import Data.Singletons
34import Data.Singletons
43−import Data.Singletons.TypeLits
44import Data.Vector.Storable ( Vector )
35import Data.Vector.Storable ( Vector )
45import qualified Data.Vector.Storable as V
36import qualified Data.Vector.Storable as V
46−
47−#if MIN_VERSION_base(4,11,0)
48−import GHC.TypeLits hiding (natVal)
49−#else
50import GHC.TypeLits
37import GHC.TypeLits
51−#endif
52−
53import qualified Numeric.LinearAlgebra.Static as H
38import qualified Numeric.LinearAlgebra.Static as H
54import Numeric.LinearAlgebra.Static
39import Numeric.LinearAlgebra.Static
55import qualified Numeric.LinearAlgebra as NLA
40import qualified Numeric.LinearAlgebra as NLA
@@ -99,9 +84,9 @@ deriving instance Show (S n)
99type instance Sing = SShape
84type instance Sing = SShape
100
85
101data SShape :: Shape -> Type where
86data SShape :: Shape -> Type where
102− D1Sing :: Sing a -> SShape ('D1 a)
87+ D1Sing :: KnownNat a => SShape ('D1 a)
103− D2Sing :: Sing a -> Sing b -> SShape ('D2 a b)
88+ D2Sing :: (KnownNat a, KnownNat b) => SShape ('D2 a b)
104− D3Sing :: KnownNat (a * c) => Sing a -> Sing b -> Sing c -> SShape ('D3 a b c)
89+ D3Sing :: (KnownNat (a * c), KnownNat a, KnownNat b, KnownNat c) => SShape ('D3 a b c)
105#else
90#else
106data instance Sing (n :: Shape) where
91data instance Sing (n :: Shape) where
107 D1Sing :: Sing a -> Sing ('D1 a)
92 D1Sing :: Sing a -> Sing ('D1 a)
@@ -110,11 +95,11 @@ data instance Sing (n :: Shape) where
110#endif
95#endif
111
96
112instance KnownNat a => SingI ('D1 a) where
97instance KnownNat a => SingI ('D1 a) where
113− sing = D1Sing sing
98+ sing = D1Sing
114instance (KnownNat a, KnownNat b) => SingI ('D2 a b) where
99instance (KnownNat a, KnownNat b) => SingI ('D2 a b) where
115− sing = D2Sing sing sing
100+ sing = D2Sing
116instance (KnownNat a, KnownNat b, KnownNat c, KnownNat (a * c)) => SingI ('D3 a b c) where
101instance (KnownNat a, KnownNat b, KnownNat c, KnownNat (a * c)) => SingI ('D3 a b c) where
117− sing = D3Sing sing sing sing
102+ sing = D3Sing
118
103
119instance SingI x => Num (S x) where
104instance SingI x => Num (S x) where
120 (+) = n2 (+)
105 (+) = n2 (+)
@@ -163,13 +148,13 @@ randomOfShape :: forall x m. ( MonadRandom m, SingI x ) => m (S x)
163randomOfShape = do
148randomOfShape = do
164 seed :: Int <- getRandom
149 seed :: Int <- getRandom
165 return $ case (sing :: Sing x) of
150 return $ case (sing :: Sing x) of
166− D1Sing SNat ->
151+ D1Sing ->
167 S1D (randomVector seed Uniform * 2 - 1)
152 S1D (randomVector seed Uniform * 2 - 1)
168
153
169− D2Sing SNat SNat ->
154+ D2Sing ->
170 S2D (uniformSample seed (-1) 1)
155 S2D (uniformSample seed (-1) 1)
171
156
172− D3Sing SNat SNat SNat ->
157+ D3Sing ->
173 S3D (uniformSample seed (-1) 1)
158 S3D (uniformSample seed (-1) 1)
174
159
175-- | Generate a shape from a Storable Vector.
160-- | Generate a shape from a Storable Vector.
@@ -177,13 +162,13 @@ randomOfShape = do
177-- Returns Nothing if the vector is of the wrong size.
162-- Returns Nothing if the vector is of the wrong size.
178fromStorable :: forall x. SingI x => Vector Double -> Maybe (S x)
163fromStorable :: forall x. SingI x => Vector Double -> Maybe (S x)
179fromStorable xs = case sing :: Sing x of
164fromStorable xs = case sing :: Sing x of
180− D1Sing SNat ->
165+ D1Sing ->
181 S1D <$> H.create xs
166 S1D <$> H.create xs
182
167
183− D2Sing SNat SNat ->
168+ D2Sing ->
184 S2D <$> mkL xs
169 S2D <$> mkL xs
185
170
186− D3Sing SNat SNat SNat ->
171+ D3Sing ->
187 S3D <$> mkL xs
172 S3D <$> mkL xs
188 where
173 where
189 mkL :: forall rows columns. (KnownNat rows, KnownNat columns)
174 mkL :: forall rows columns. (KnownNat rows, KnownNat columns)
@@ -220,13 +205,13 @@ n2 f (S2D x) (S2D y) = S2D (f x y)
220n2 f (S3D x) (S3D y) = S3D (f x y)
205n2 f (S3D x) (S3D y) = S3D (f x y)
221
206
222-- Helper function for creating the number instances
207-- Helper function for creating the number instances
223−nk :: forall x. SingI x => Double -> S x
208+nk :: forall x. (SingI x) => Double -> S x
224nk x = case (sing :: Sing x) of
209nk x = case (sing :: Sing x) of
225− D1Sing SNat ->
210+ D1Sing ->
226 S1D (konst x)
211 S1D (konst x)
227
212
228− D2Sing SNat SNat ->
213+ D2Sing ->
229 S2D (konst x)
214 S2D (konst x)
230
215
231− D3Sing SNat SNat SNat ->
216+ D3Sing ->
232 S3D (konst x)
217 S3D (konst x)
src/Grenade/Layers/Convolution.hs−7
@@ -28,16 +28,9 @@ import Control.Monad.Random hiding ( fromList )
28import Data.Maybe
28import Data.Maybe
29import Data.Proxy
29import Data.Proxy
30import Data.Serialize
30import Data.Serialize
31−import Data.Singletons.TypeLits
32
31
33−#if MIN_VERSION_base(4,11,0)
34−import GHC.TypeLits hiding (natVal)
35−#else
36import GHC.TypeLits
32import GHC.TypeLits
37−#endif
38−#if MIN_VERSION_base(4,9,0)
39import Data.Kind (Type)
33import Data.Kind (Type)
40−#endif
41
34
42import Numeric.LinearAlgebra hiding ( uniformSample, konst )
35import Numeric.LinearAlgebra hiding ( uniformSample, konst )
43import qualified Numeric.LinearAlgebra as LA
36import qualified Numeric.LinearAlgebra as LA
src/Grenade/Layers/Crop.hs−7
@@ -21,16 +21,9 @@ module Grenade.Layers.Crop (
21import Data.Maybe
21import Data.Maybe
22import Data.Proxy
22import Data.Proxy
23import Data.Serialize
23import Data.Serialize
24−import Data.Singletons.TypeLits
25
24
26−#if MIN_VERSION_base(4,11,0)
27−import GHC.TypeLits hiding (natVal)
28−#else
29import GHC.TypeLits
25import GHC.TypeLits
30−#endif
31−#if MIN_VERSION_base(4,9,0)
32import Data.Kind (Type)
26import Data.Kind (Type)
33−#endif
34
27
35import Grenade.Core
28import Grenade.Core
36import Grenade.Layers.Internal.Pad
29import Grenade.Layers.Internal.Pad
src/Grenade/Layers/Deconvolution.hs−7
@@ -32,16 +32,9 @@ import Control.Monad.Random hiding ( fromList )
32import Data.Maybe
32import Data.Maybe
33import Data.Proxy
33import Data.Proxy
34import Data.Serialize
34import Data.Serialize
35−import Data.Singletons.TypeLits
36
35
37−#if MIN_VERSION_base(4,11,0)
38−import GHC.TypeLits hiding (natVal)
39−#else
40import GHC.TypeLits
36import GHC.TypeLits
41−#endif
42−#if MIN_VERSION_base(4,9,0)
43import Data.Kind (Type)
37import Data.Kind (Type)
44−#endif
45
38
46import Numeric.LinearAlgebra hiding ( uniformSample, konst )
39import Numeric.LinearAlgebra hiding ( uniformSample, konst )
47import qualified Numeric.LinearAlgebra as LA
40import qualified Numeric.LinearAlgebra as LA
src/Grenade/Layers/FullyConnected.hs+1−1
@@ -13,7 +13,6 @@ import Control.Monad.Random hiding (fromList)
13
13
14import Data.Proxy
14import Data.Proxy
15import Data.Serialize
15import Data.Serialize
16−import Data.Singletons.TypeLits
17
16
18import qualified Numeric.LinearAlgebra as LA
17import qualified Numeric.LinearAlgebra as LA
19import Numeric.LinearAlgebra.Static
18import Numeric.LinearAlgebra.Static
@@ -21,6 +20,7 @@ import Numeric.LinearAlgebra.Static
21import Grenade.Core
20import Grenade.Core
22
21
23import Grenade.Layers.Internal.Update
22import Grenade.Layers.Internal.Update
23+import GHC.TypeLits
24
24
25-- | A basic fully connected (or inner product) neural network layer.
25-- | A basic fully connected (or inner product) neural network layer.
26data FullyConnected i o = FullyConnected
26data FullyConnected i o = FullyConnected
src/Grenade/Layers/Pad.hs−7
@@ -21,16 +21,9 @@ module Grenade.Layers.Pad (
21import Data.Maybe
21import Data.Maybe
22import Data.Proxy
22import Data.Proxy
23import Data.Serialize
23import Data.Serialize
24−import Data.Singletons.TypeLits
25
24
26−#if MIN_VERSION_base(4,11,0)
27−import GHC.TypeLits hiding (natVal)
28−#else
29import GHC.TypeLits
25import GHC.TypeLits
30−#endif
31−#if MIN_VERSION_base(4,9,0)
32import Data.Kind (Type)
26import Data.Kind (Type)
33−#endif
34
27
35import Grenade.Core
28import Grenade.Core
36import Grenade.Layers.Internal.Pad
29import Grenade.Layers.Internal.Pad
src/Grenade/Layers/Pooling.hs−7
@@ -22,16 +22,9 @@ module Grenade.Layers.Pooling (
22import Data.Maybe
22import Data.Maybe
23import Data.Proxy
23import Data.Proxy
24import Data.Serialize
24import Data.Serialize
25−import Data.Singletons.TypeLits
26
25
27−#if MIN_VERSION_base(4,11,0)
28−import GHC.TypeLits hiding (natVal)
29−#else
30import GHC.TypeLits
26import GHC.TypeLits
31−#endif
32−#if MIN_VERSION_base(4,9,0)
33import Data.Kind (Type)
27import Data.Kind (Type)
34−#endif
35
28
36import Grenade.Core
29import Grenade.Core
37import Grenade.Layers.Internal.Pooling
30import Grenade.Layers.Internal.Pooling
src/Grenade/Layers/Reshape.hs−1
@@ -17,7 +17,6 @@ module Grenade.Layers.Reshape (
17
17
18import Data.Serialize
18import Data.Serialize
19
19
20−import Data.Singletons.TypeLits
21import GHC.TypeLits
20import GHC.TypeLits
22
21
23import Numeric.LinearAlgebra.Static
22import Numeric.LinearAlgebra.Static
src/Grenade/Recurrent/Core/Network.hs+1−4
@@ -29,16 +29,13 @@ module Grenade.Recurrent.Core.Network (
29
29
30
30
31import Control.Monad.Random ( MonadRandom )
31import Control.Monad.Random ( MonadRandom )
32−import Data.Singletons ( SingI )
33−import Data.Singletons.Prelude ( Head, Last )
34import Data.Serialize
32import Data.Serialize
35
33
36−#if MIN_VERSION_base(4,9,0)
37import Data.Kind (Type)
34import Data.Kind (Type)
38−#endif
39
35
40import Grenade.Core
36import Grenade.Core
41import Grenade.Recurrent.Core.Layer
37import Grenade.Recurrent.Core.Layer
38+import Prelude.Singletons
42
39
43-- | Witness type to say indicate we're building up with a normal feed
40-- | Witness type to say indicate we're building up with a normal feed
44-- forward layer.
41-- forward layer.
src/Grenade/Recurrent/Core/Runner.hs+1−1
@@ -17,10 +17,10 @@ module Grenade.Recurrent.Core.Runner (
17 ) where
17 ) where
18
18
19import Data.List ( foldl' )
19import Data.List ( foldl' )
20−import Data.Singletons.Prelude
21import Grenade.Core
20import Grenade.Core
22
21
23import Grenade.Recurrent.Core.Network
22import Grenade.Recurrent.Core.Network
23+import Prelude.Singletons
24
24
25type RecurrentGradients layers = [RecurrentGradient layers]
25type RecurrentGradients layers = [RecurrentGradient layers]
26
26
src/Grenade/Recurrent/Layers/BasicRecurrent.hs−3
@@ -16,11 +16,8 @@ module Grenade.Recurrent.Layers.BasicRecurrent (
16
16
17import Control.Monad.Random ( MonadRandom, getRandom )
17import Control.Monad.Random ( MonadRandom, getRandom )
18
18
19−import Data.Singletons.TypeLits
20
19
21−#if MIN_VERSION_base(4,9,0)
22import Data.Kind (Type)
20import Data.Kind (Type)
23−#endif
24
21
25import Numeric.LinearAlgebra.Static
22import Numeric.LinearAlgebra.Static
26
23
src/Grenade/Recurrent/Layers/LSTM.hs+1−4
@@ -21,11 +21,7 @@ import Control.Monad.Random ( MonadRandom, getRandom )
21-- import Data.List ( foldl1' )
21-- import Data.List ( foldl1' )
22import Data.Proxy
22import Data.Proxy
23import Data.Serialize
23import Data.Serialize
24−import Data.Singletons.TypeLits
25−
26−#if MIN_VERSION_base(4,9,0)
27import Data.Kind (Type)
24import Data.Kind (Type)
28−#endif
29
25
30import qualified Numeric.LinearAlgebra as LA
26import qualified Numeric.LinearAlgebra as LA
31import Numeric.LinearAlgebra.Static
27import Numeric.LinearAlgebra.Static
@@ -33,6 +29,7 @@ import Numeric.LinearAlgebra.Static
33import Grenade.Core
29import Grenade.Core
34import Grenade.Recurrent.Core
30import Grenade.Recurrent.Core
35import Grenade.Layers.Internal.Update
31import Grenade.Layers.Internal.Update
32+import GHC.TypeLits
36
33
37
34
38-- | Long Short Term Memory Recurrent unit
35-- | Long Short Term Memory Recurrent unit
src/Grenade/Utils/OneHot.hs+1−1
@@ -22,7 +22,6 @@ import Data.Map ( Map )
22import qualified Data.Map as M
22import qualified Data.Map as M
23
23
24import Data.Proxy
24import Data.Proxy
25−import Data.Singletons.TypeLits
26
25
27import Data.Vector ( Vector )
26import Data.Vector ( Vector )
28import qualified Data.Vector as V
27import qualified Data.Vector as V
@@ -31,6 +30,7 @@ import qualified Data.Vector.Storable as VS
31import Numeric.LinearAlgebra ( maxIndex )
30import Numeric.LinearAlgebra ( maxIndex )
32import Numeric.LinearAlgebra.Devel
31import Numeric.LinearAlgebra.Devel
33import Numeric.LinearAlgebra.Static
32import Numeric.LinearAlgebra.Static
33+import GHC.TypeLits
34
34
35import Grenade.Core.Shape
35import Grenade.Core.Shape
36
36
stack.yaml+7−1
@@ -20,7 +20,7 @@
20#
20#
21# resolver: ./custom-snapshot.yaml
21# resolver: ./custom-snapshot.yaml
22# resolver: https://example.com/snapshots/2018-01-01.yaml
22# resolver: https://example.com/snapshots/2018-01-01.yaml
23−resolver: lts-18.28
23+resolver: lts-20.18
24
24
25# User packages to be built.
25# User packages to be built.
26# Various formats can be used as shown in the example below.
26# Various formats can be used as shown in the example below.
@@ -70,3 +70,9 @@ extra-deps:
70#
70#
71# Allow a newer minor version of GHC than the snapshot specifies
71# Allow a newer minor version of GHC than the snapshot specifies
72# compiler-check: newer-minor
72# compiler-check: newer-minor
73+
74+nix:
75+ enable: true
76+ packages:
77+ - blas
78+ - lapack
stack.yaml.lock+5−5
@@ -7,13 +7,13 @@ packages:
7- completed:
7- completed:
8 hackage: typelits-witnesses-0.3.0.3@sha256:2d9df4ac6ff3077bfd2bf659e4b495e157723ac5b45c519762853f55df5c16db,2738
8 hackage: typelits-witnesses-0.3.0.3@sha256:2d9df4ac6ff3077bfd2bf659e4b495e157723ac5b45c519762853f55df5c16db,2738
9 pantry-tree:
9 pantry-tree:
10− size: 469
11 sha256: 6a42a462f98e94933b6e9721acd912c6c6b6a4743635efd15cc5871908c816a0
10 sha256: 6a42a462f98e94933b6e9721acd912c6c6b6a4743635efd15cc5871908c816a0
11+ size: 469
12 original:
12 original:
13 hackage: typelits-witnesses-0.3.0.3
13 hackage: typelits-witnesses-0.3.0.3
14snapshots:
14snapshots:
15- completed:
15- completed:
16+ sha256: 9fa4bece7acfac1fc7930c5d6e24606004b09e80aa0e52e9f68b148201008db9
16− size: 590100
17+ size: 649606
17− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/28.yaml
18+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/18.yaml
18− sha256: 428ec8d5ce932190d3cbe266b9eb3c175cd81e984babf876b64019e2cbe4ea68
19− original: lts-18.28
19+ original: lts-20.18