on 5206c95 help sign in
examples/grenade-examples.cabal+5−6
since splitsnapshots
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.18
29+ , optparse-applicative >= 0.13 && < 0.16
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.18
45+ , optparse-applicative >= 0.13 && < 0.16
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.18
64+ , optparse-applicative >= 0.13 && < 0.16
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.18
81+ , optparse-applicative >= 0.13 && < 0.16
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,14 +96,13 @@ executable shakespeare
96 , bytestring
96 , bytestring
97 , cereal
97 , cereal
98 , either
98 , either
99− , optparse-applicative >= 0.13 && < 0.18
99+ , optparse-applicative >= 0.13 && < 0.16
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
107 , vector
106 , vector
108 , MonadRandom
107 , MonadRandom
109 , containers
108 , containers
examples/main/shakespeare.hs+7−2
@@ -14,15 +14,22 @@ 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
17
20
18import qualified Data.Vector as V
21import qualified Data.Vector as V
19import Data.Vector ( Vector )
22import Data.Vector ( Vector )
20
23
21import qualified Data.Map as M
24import qualified Data.Map as M
25+#if ! MIN_VERSION_base(4,13,0)
26+import Data.Proxy ( Proxy (..) )
27+#endif
22
28
23import qualified Data.ByteString as B
29import qualified Data.ByteString as B
24import Data.Serialize
30import Data.Serialize
25
31
32+import Data.Singletons.Prelude
26import GHC.TypeLits
33import GHC.TypeLits
27
34
28import Numeric.LinearAlgebra.Static ( konst )
35import Numeric.LinearAlgebra.Static ( konst )
@@ -34,8 +41,6 @@ import Grenade.Recurrent
34import Grenade.Utils.OneHot
41import Grenade.Utils.OneHot
35
42
36import System.IO.Unsafe ( unsafeInterleaveIO )
43import System.IO.Unsafe ( unsafeInterleaveIO )
37−import Data.Proxy
38−import Prelude.Singletons
39
44
40-- The defininition for our natural language recurrent network.
45-- The defininition for our natural language recurrent network.
41-- This network is able to learn and generate simple words in
46-- This network is able to learn and generate simple words in
grenade.cabal+1−2
@@ -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.0
41+ , bytestring == 0.10.*
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,7 +48,6 @@ 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
52 , vector >= 0.11 && < 0.13
51 , vector >= 0.11 && < 0.13
53
52
54 ghc-options:
53 ghc-options:
src/Grenade/Core/Network.hs+1−1
@@ -34,6 +34,7 @@ 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
37import Data.Serialize
38import Data.Serialize
38
39
39#if MIN_VERSION_base(4,9,0)
40#if MIN_VERSION_base(4,9,0)
@@ -43,7 +44,6 @@ import Data.Kind (Type)
43import Grenade.Core.Layer
44import Grenade.Core.Layer
44import Grenade.Core.LearningParameters
45import Grenade.Core.LearningParameters
45import Grenade.Core.Shape
46import 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+1−2
@@ -13,12 +13,11 @@ module Grenade.Core.Runner (
13 , runNet
13 , runNet
14 ) where
14 ) where
15
15
16+import Data.Singletons.Prelude
16
17
17import Grenade.Core.LearningParameters
18import Grenade.Core.LearningParameters
18import Grenade.Core.Network
19import Grenade.Core.Network
19import Grenade.Core.Shape
20import Grenade.Core.Shape
20−import Data.Singletons
21−import Prelude.Singletons
22
21
23-- | Perform reverse automatic differentiation on the network
22-- | Perform reverse automatic differentiation on the network
24-- for the current input and expected output.
23-- for the current input and expected output.
src/Grenade/Core/Shape.hs+31−16
@@ -21,20 +21,35 @@ 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)
24 , SShape (..)
25 , SShape (..)
26+#else
27+ , Sing (..)
28+#endif
29+
25 , randomOfShape
30 , randomOfShape
26 , fromStorable
31 , fromStorable
27 ) where
32 ) where
28
33
29import Control.DeepSeq (NFData (..))
34import Control.DeepSeq (NFData (..))
30import Control.Monad.Random ( MonadRandom, getRandom )
35import Control.Monad.Random ( MonadRandom, getRandom )
36+
37+#if MIN_VERSION_base(4,13,0)
31import Data.Kind (Type)
38import Data.Kind (Type)
39+#endif
32import Data.Proxy
40import Data.Proxy
33import Data.Serialize
41import Data.Serialize
34import Data.Singletons
42import Data.Singletons
43+import Data.Singletons.TypeLits
35import Data.Vector.Storable ( Vector )
44import Data.Vector.Storable ( Vector )
36import qualified Data.Vector.Storable as V
45import qualified Data.Vector.Storable as V
46+
47+#if MIN_VERSION_base(4,11,0)
48+import GHC.TypeLits hiding (natVal)
49+#else
37import GHC.TypeLits
50import GHC.TypeLits
51+#endif
52+
38import qualified Numeric.LinearAlgebra.Static as H
53import qualified Numeric.LinearAlgebra.Static as H
39import Numeric.LinearAlgebra.Static
54import Numeric.LinearAlgebra.Static
40import qualified Numeric.LinearAlgebra as NLA
55import qualified Numeric.LinearAlgebra as NLA
@@ -84,9 +99,9 @@ deriving instance Show (S n)
84type instance Sing = SShape
99type instance Sing = SShape
85
100
86data SShape :: Shape -> Type where
101data SShape :: Shape -> Type where
87− D1Sing :: KnownNat a => SShape ('D1 a)
102+ D1Sing :: Sing a -> SShape ('D1 a)
88− D2Sing :: (KnownNat a, KnownNat b) => SShape ('D2 a b)
103+ D2Sing :: Sing a -> Sing b -> SShape ('D2 a b)
89− D3Sing :: (KnownNat (a * c), KnownNat a, KnownNat b, KnownNat c) => SShape ('D3 a b c)
104+ D3Sing :: KnownNat (a * c) => Sing a -> Sing b -> Sing c -> SShape ('D3 a b c)
90#else
105#else
91data instance Sing (n :: Shape) where
106data instance Sing (n :: Shape) where
92 D1Sing :: Sing a -> Sing ('D1 a)
107 D1Sing :: Sing a -> Sing ('D1 a)
@@ -95,11 +110,11 @@ data instance Sing (n :: Shape) where
95#endif
110#endif
96
111
97instance KnownNat a => SingI ('D1 a) where
112instance KnownNat a => SingI ('D1 a) where
98− sing = D1Sing
113+ sing = D1Sing sing
99instance (KnownNat a, KnownNat b) => SingI ('D2 a b) where
114instance (KnownNat a, KnownNat b) => SingI ('D2 a b) where
100− sing = D2Sing
115+ sing = D2Sing sing sing
101instance (KnownNat a, KnownNat b, KnownNat c, KnownNat (a * c)) => SingI ('D3 a b c) where
116instance (KnownNat a, KnownNat b, KnownNat c, KnownNat (a * c)) => SingI ('D3 a b c) where
102− sing = D3Sing
117+ sing = D3Sing sing sing sing
103
118
104instance SingI x => Num (S x) where
119instance SingI x => Num (S x) where
105 (+) = n2 (+)
120 (+) = n2 (+)
@@ -148,13 +163,13 @@ randomOfShape :: forall x m. ( MonadRandom m, SingI x ) => m (S x)
148randomOfShape = do
163randomOfShape = do
149 seed :: Int <- getRandom
164 seed :: Int <- getRandom
150 return $ case (sing :: Sing x) of
165 return $ case (sing :: Sing x) of
151− D1Sing ->
166+ D1Sing SNat ->
152 S1D (randomVector seed Uniform * 2 - 1)
167 S1D (randomVector seed Uniform * 2 - 1)
153
168
154− D2Sing ->
169+ D2Sing SNat SNat ->
155 S2D (uniformSample seed (-1) 1)
170 S2D (uniformSample seed (-1) 1)
156
171
157− D3Sing ->
172+ D3Sing SNat SNat SNat ->
158 S3D (uniformSample seed (-1) 1)
173 S3D (uniformSample seed (-1) 1)
159
174
160-- | Generate a shape from a Storable Vector.
175-- | Generate a shape from a Storable Vector.
@@ -162,13 +177,13 @@ randomOfShape = do
162-- Returns Nothing if the vector is of the wrong size.
177-- Returns Nothing if the vector is of the wrong size.
163fromStorable :: forall x. SingI x => Vector Double -> Maybe (S x)
178fromStorable :: forall x. SingI x => Vector Double -> Maybe (S x)
164fromStorable xs = case sing :: Sing x of
179fromStorable xs = case sing :: Sing x of
165− D1Sing ->
180+ D1Sing SNat ->
166 S1D <$> H.create xs
181 S1D <$> H.create xs
167
182
168− D2Sing ->
183+ D2Sing SNat SNat ->
169 S2D <$> mkL xs
184 S2D <$> mkL xs
170
185
171− D3Sing ->
186+ D3Sing SNat SNat SNat ->
172 S3D <$> mkL xs
187 S3D <$> mkL xs
173 where
188 where
174 mkL :: forall rows columns. (KnownNat rows, KnownNat columns)
189 mkL :: forall rows columns. (KnownNat rows, KnownNat columns)
@@ -205,13 +220,13 @@ n2 f (S2D x) (S2D y) = S2D (f x y)
205n2 f (S3D x) (S3D y) = S3D (f x y)
220n2 f (S3D x) (S3D y) = S3D (f x y)
206
221
207-- Helper function for creating the number instances
222-- Helper function for creating the number instances
208−nk :: forall x. (SingI x) => Double -> S x
223+nk :: forall x. SingI x => Double -> S x
209nk x = case (sing :: Sing x) of
224nk x = case (sing :: Sing x) of
210− D1Sing ->
225+ D1Sing SNat ->
211 S1D (konst x)
226 S1D (konst x)
212
227
213− D2Sing ->
228+ D2Sing SNat SNat ->
214 S2D (konst x)
229 S2D (konst x)
215
230
216− D3Sing ->
231+ D3Sing SNat SNat SNat ->
217 S3D (konst x)
232 S3D (konst x)
src/Grenade/Layers/Convolution.hs+7
@@ -28,9 +28,16 @@ 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
31
32
33+#if MIN_VERSION_base(4,11,0)
34+import GHC.TypeLits hiding (natVal)
35+#else
32import GHC.TypeLits
36import GHC.TypeLits
37+#endif
38+#if MIN_VERSION_base(4,9,0)
33import Data.Kind (Type)
39import Data.Kind (Type)
40+#endif
34
41
35import Numeric.LinearAlgebra hiding ( uniformSample, konst )
42import Numeric.LinearAlgebra hiding ( uniformSample, konst )
36import qualified Numeric.LinearAlgebra as LA
43import qualified Numeric.LinearAlgebra as LA
src/Grenade/Layers/Crop.hs+7
@@ -21,9 +21,16 @@ 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
24
25
26+#if MIN_VERSION_base(4,11,0)
27+import GHC.TypeLits hiding (natVal)
28+#else
25import GHC.TypeLits
29import GHC.TypeLits
30+#endif
31+#if MIN_VERSION_base(4,9,0)
26import Data.Kind (Type)
32import Data.Kind (Type)
33+#endif
27
34
28import Grenade.Core
35import Grenade.Core
29import Grenade.Layers.Internal.Pad
36import Grenade.Layers.Internal.Pad
src/Grenade/Layers/Deconvolution.hs+7
@@ -32,9 +32,16 @@ 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
35
36
37+#if MIN_VERSION_base(4,11,0)
38+import GHC.TypeLits hiding (natVal)
39+#else
36import GHC.TypeLits
40import GHC.TypeLits
41+#endif
42+#if MIN_VERSION_base(4,9,0)
37import Data.Kind (Type)
43import Data.Kind (Type)
44+#endif
38
45
39import Numeric.LinearAlgebra hiding ( uniformSample, konst )
46import Numeric.LinearAlgebra hiding ( uniformSample, konst )
40import qualified Numeric.LinearAlgebra as LA
47import qualified Numeric.LinearAlgebra as LA
src/Grenade/Layers/FullyConnected.hs+1−1
@@ -13,6 +13,7 @@ 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
16
17
17import qualified Numeric.LinearAlgebra as LA
18import qualified Numeric.LinearAlgebra as LA
18import Numeric.LinearAlgebra.Static
19import Numeric.LinearAlgebra.Static
@@ -20,7 +21,6 @@ import Numeric.LinearAlgebra.Static
20import Grenade.Core
21import Grenade.Core
21
22
22import Grenade.Layers.Internal.Update
23import 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,9 +21,16 @@ 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
24
25
26+#if MIN_VERSION_base(4,11,0)
27+import GHC.TypeLits hiding (natVal)
28+#else
25import GHC.TypeLits
29import GHC.TypeLits
30+#endif
31+#if MIN_VERSION_base(4,9,0)
26import Data.Kind (Type)
32import Data.Kind (Type)
33+#endif
27
34
28import Grenade.Core
35import Grenade.Core
29import Grenade.Layers.Internal.Pad
36import Grenade.Layers.Internal.Pad
src/Grenade/Layers/Pooling.hs+7
@@ -22,9 +22,16 @@ 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
25
26
27+#if MIN_VERSION_base(4,11,0)
28+import GHC.TypeLits hiding (natVal)
29+#else
26import GHC.TypeLits
30import GHC.TypeLits
31+#endif
32+#if MIN_VERSION_base(4,9,0)
27import Data.Kind (Type)
33import Data.Kind (Type)
34+#endif
28
35
29import Grenade.Core
36import Grenade.Core
30import Grenade.Layers.Internal.Pooling
37import Grenade.Layers.Internal.Pooling
src/Grenade/Layers/Reshape.hs+1
@@ -17,6 +17,7 @@ module Grenade.Layers.Reshape (
17
17
18import Data.Serialize
18import Data.Serialize
19
19
20+import Data.Singletons.TypeLits
20import GHC.TypeLits
21import GHC.TypeLits
21
22
22import Numeric.LinearAlgebra.Static
23import Numeric.LinearAlgebra.Static
src/Grenade/Recurrent/Core/Network.hs+4−1
@@ -29,13 +29,16 @@ 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 )
32import Data.Serialize
34import Data.Serialize
33
35
36+#if MIN_VERSION_base(4,9,0)
34import Data.Kind (Type)
37import Data.Kind (Type)
38+#endif
35
39
36import Grenade.Core
40import Grenade.Core
37import Grenade.Recurrent.Core.Layer
41import Grenade.Recurrent.Core.Layer
38−import Prelude.Singletons
39
42
40-- | Witness type to say indicate we're building up with a normal feed
43-- | Witness type to say indicate we're building up with a normal feed
41-- forward layer.
44-- 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
20import Grenade.Core
21import Grenade.Core
21
22
22import Grenade.Recurrent.Core.Network
23import 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,8 +16,11 @@ 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
19
20
21+#if MIN_VERSION_base(4,9,0)
20import Data.Kind (Type)
22import Data.Kind (Type)
23+#endif
21
24
22import Numeric.LinearAlgebra.Static
25import Numeric.LinearAlgebra.Static
23
26
src/Grenade/Recurrent/Layers/LSTM.hs+4−1
@@ -21,7 +21,11 @@ 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)
24import Data.Kind (Type)
27import Data.Kind (Type)
28+#endif
25
29
26import qualified Numeric.LinearAlgebra as LA
30import qualified Numeric.LinearAlgebra as LA
27import Numeric.LinearAlgebra.Static
31import Numeric.LinearAlgebra.Static
@@ -29,7 +33,6 @@ import Numeric.LinearAlgebra.Static
29import Grenade.Core
33import Grenade.Core
30import Grenade.Recurrent.Core
34import Grenade.Recurrent.Core
31import Grenade.Layers.Internal.Update
35import Grenade.Layers.Internal.Update
32−import GHC.TypeLits
33
36
34
37
35-- | Long Short Term Memory Recurrent unit
38-- | Long Short Term Memory Recurrent unit
src/Grenade/Utils/OneHot.hs+1−1
@@ -22,6 +22,7 @@ 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
25
26
26import Data.Vector ( Vector )
27import Data.Vector ( Vector )
27import qualified Data.Vector as V
28import qualified Data.Vector as V
@@ -30,7 +31,6 @@ import qualified Data.Vector.Storable as VS
30import Numeric.LinearAlgebra ( maxIndex )
31import Numeric.LinearAlgebra ( maxIndex )
31import Numeric.LinearAlgebra.Devel
32import Numeric.LinearAlgebra.Devel
32import Numeric.LinearAlgebra.Static
33import Numeric.LinearAlgebra.Static
33−import GHC.TypeLits
34
34
35import Grenade.Core.Shape
35import Grenade.Core.Shape
36
36
stack.yaml+1−7
@@ -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-20.18
23+resolver: lts-15.5
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,9 +70,3 @@ 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− sha256: 6a42a462f98e94933b6e9721acd912c6c6b6a4743635efd15cc5871908c816a0
11 size: 469
10 size: 469
11+ sha256: 6a42a462f98e94933b6e9721acd912c6c6b6a4743635efd15cc5871908c816a0
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
17− size: 649606
16+ size: 491372
18− url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/18.yaml
17+ url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/15/5.yaml
18+ sha256: 1b549cfff328040c382a70a84a2087aac8dab6d778bf92f32a93a771a1980dfc
19− original: lts-20.18
19+ original: lts-15.5