git.iko.soy/typeable/servant
on master help sign in
Add hoistServer to HasServer
24af338Oleg Grenrus
.gitignore+1
@@ -1,5 +1,6 @@
1**/*/dist
1**/*/dist
2dist-newstyle
2dist-newstyle
3+.ghc.environment.*
3/bin
4/bin
4/lib
5/lib
5/share
6/share
servant-server/CHANGELOG.md+9
@@ -1,3 +1,12 @@
1+Next
2+----
3+
4+### Breaking changes
5+
6+* Added `hoistServer` member to the `HasServer` class, which is `HasServer`
7+ specific `enter`.
8+ ([#804](https://github.com/haskell-servant/servant/pull/804))
9+
10.11
100.11
2----
11----
3
12
servant-server/src/Servant/Server/Experimental/Auth.hs+4−3
@@ -21,9 +21,8 @@ import Network.Wai (Request)
21import Servant ((:>))
21import Servant ((:>))
22import Servant.API.Experimental.Auth
22import Servant.API.Experimental.Auth
23import Servant.Server.Internal (HasContextEntry,
23import Servant.Server.Internal (HasContextEntry,
24− HasServer, ServerT,
24+ HasServer (..),
25− getContextEntry,
25+ getContextEntry)
26− route)
27import Servant.Server.Internal.RoutingApplication (addAuthCheck,
26import Servant.Server.Internal.RoutingApplication (addAuthCheck,
28 delayedFailFatal,
27 delayedFailFatal,
29 DelayedIO,
28 DelayedIO,
@@ -58,6 +57,8 @@ instance ( HasServer api context
58 type ServerT (AuthProtect tag :> api) m =
57 type ServerT (AuthProtect tag :> api) m =
59 AuthServerData (AuthProtect tag) -> ServerT api m
58 AuthServerData (AuthProtect tag) -> ServerT api m
60
59
60+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
61+
61 route Proxy context subserver =
62 route Proxy context subserver =
62 route (Proxy :: Proxy api) context (subserver `addAuthCheck` withRequest authCheck)
63 route (Proxy :: Proxy api) context (subserver `addAuthCheck` withRequest authCheck)
63 where
64 where
servant-server/src/Servant/Server/Internal.hs+51−7
@@ -8,6 +8,7 @@
8{-# LANGUAGE MultiParamTypeClasses #-}
8{-# LANGUAGE MultiParamTypeClasses #-}
9{-# LANGUAGE OverloadedStrings #-}
9{-# LANGUAGE OverloadedStrings #-}
10{-# LANGUAGE PolyKinds #-}
10{-# LANGUAGE PolyKinds #-}
11+{-# LANGUAGE RankNTypes #-}
11{-# LANGUAGE ScopedTypeVariables #-}
12{-# LANGUAGE ScopedTypeVariables #-}
12{-# LANGUAGE TypeFamilies #-}
13{-# LANGUAGE TypeFamilies #-}
13{-# LANGUAGE TypeOperators #-}
14{-# LANGUAGE TypeOperators #-}
@@ -33,7 +34,7 @@ import Data.Maybe (fromMaybe, mapMaybe)
33import Data.Either (partitionEithers)
34import Data.Either (partitionEithers)
34import Data.String (fromString)
35import Data.String (fromString)
35import Data.String.Conversions (cs, (<>))
36import Data.String.Conversions (cs, (<>))
36−import Data.Tagged (Tagged(..), untag)
37+import Data.Tagged (Tagged(..), retag, untag)
37import qualified Data.Text as T
38import qualified Data.Text as T
38import Data.Typeable
39import Data.Typeable
39import GHC.TypeLits (KnownNat, KnownSymbol, natVal,
40import GHC.TypeLits (KnownNat, KnownSymbol, natVal,
@@ -85,6 +86,13 @@ class HasServer api context where
85 -> Delayed env (Server api)
86 -> Delayed env (Server api)
86 -> Router env
87 -> Router env
87
88
89+ hoistServer
90+ :: Proxy api
91+ -> Proxy context
92+ -> (forall x. m x -> n x)
93+ -> ServerT api m
94+ -> ServerT api n
95+
88type Server api = ServerT api Handler
96type Server api = ServerT api Handler
89
97
90-- * Instances
98-- * Instances
@@ -109,6 +117,11 @@ instance (HasServer a context, HasServer b context) => HasServer (a :<|> b) cont
109 where pa = Proxy :: Proxy a
117 where pa = Proxy :: Proxy a
110 pb = Proxy :: Proxy b
118 pb = Proxy :: Proxy b
111
119
120+ -- | This is better than 'enter', as it's taylor made for 'HasServer'.
121+ hoistServer _ pc nt (a :<|> b) =
122+ hoistServer (Proxy :: Proxy a) pc nt a :<|>
123+ hoistServer (Proxy :: Proxy b) pc nt b
124+
112-- | If you use 'Capture' in one of the endpoints for your API,
125-- | If you use 'Capture' in one of the endpoints for your API,
113-- this automatically requires your server-side handler to be a function
126-- this automatically requires your server-side handler to be a function
114-- that takes an argument of the type specified by the 'Capture'.
127-- that takes an argument of the type specified by the 'Capture'.
@@ -132,6 +145,8 @@ instance (KnownSymbol capture, FromHttpApiData a, HasServer api context)
132 type ServerT (Capture capture a :> api) m =
145 type ServerT (Capture capture a :> api) m =
133 a -> ServerT api m
146 a -> ServerT api m
134
147
148+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
149+
135 route Proxy context d =
150 route Proxy context d =
136 CaptureRouter $
151 CaptureRouter $
137 route (Proxy :: Proxy api)
152 route (Proxy :: Proxy api)
@@ -158,15 +173,17 @@ instance (KnownSymbol capture, FromHttpApiData a, HasServer api context)
158-- > server = getSourceFile
173-- > server = getSourceFile
159-- > where getSourceFile :: [Text] -> Handler Book
174-- > where getSourceFile :: [Text] -> Handler Book
160-- > getSourceFile pathSegments = ...
175-- > getSourceFile pathSegments = ...
161−instance (KnownSymbol capture, FromHttpApiData a, HasServer sublayout context)
176+instance (KnownSymbol capture, FromHttpApiData a, HasServer api context)
162− => HasServer (CaptureAll capture a :> sublayout) context where
177+ => HasServer (CaptureAll capture a :> api) context where
163
178
164− type ServerT (CaptureAll capture a :> sublayout) m =
179+ type ServerT (CaptureAll capture a :> api) m =
165− [a] -> ServerT sublayout m
180+ [a] -> ServerT api m
181+
182+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
166
183
167 route Proxy context d =
184 route Proxy context d =
168 CaptureAllRouter $
185 CaptureAllRouter $
169− route (Proxy :: Proxy sublayout)
186+ route (Proxy :: Proxy api)
170 context
187 context
171 (addCapture d $ \ txts -> case parseUrlPieces txts of
188 (addCapture d $ \ txts -> case parseUrlPieces txts of
172 Left _ -> delayedFail err400
189 Left _ -> delayedFail err400
@@ -241,6 +258,7 @@ instance OVERLAPPABLE_
241 ) => HasServer (Verb method status ctypes a) context where
258 ) => HasServer (Verb method status ctypes a) context where
242
259
243 type ServerT (Verb method status ctypes a) m = m a
260 type ServerT (Verb method status ctypes a) m = m a
261+ hoistServer _ _ nt s = nt s
244
262
245 route Proxy _ = methodRouter method (Proxy :: Proxy ctypes) status
263 route Proxy _ = methodRouter method (Proxy :: Proxy ctypes) status
246 where method = reflectMethod (Proxy :: Proxy method)
264 where method = reflectMethod (Proxy :: Proxy method)
@@ -252,6 +270,7 @@ instance OVERLAPPING_
252 ) => HasServer (Verb method status ctypes (Headers h a)) context where
270 ) => HasServer (Verb method status ctypes (Headers h a)) context where
253
271
254 type ServerT (Verb method status ctypes (Headers h a)) m = m (Headers h a)
272 type ServerT (Verb method status ctypes (Headers h a)) m = m (Headers h a)
273+ hoistServer _ _ nt s = nt s
255
274
256 route Proxy _ = methodRouterHeaders method (Proxy :: Proxy ctypes) status
275 route Proxy _ = methodRouterHeaders method (Proxy :: Proxy ctypes) status
257 where method = reflectMethod (Proxy :: Proxy method)
276 where method = reflectMethod (Proxy :: Proxy method)
@@ -283,6 +302,8 @@ instance (KnownSymbol sym, FromHttpApiData a, HasServer api context)
283 type ServerT (Header sym a :> api) m =
302 type ServerT (Header sym a :> api) m =
284 Maybe a -> ServerT api m
303 Maybe a -> ServerT api m
285
304
305+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
306+
286 route Proxy context subserver = route (Proxy :: Proxy api) context $
307 route Proxy context subserver = route (Proxy :: Proxy api) context $
287 subserver `addHeaderCheck` withRequest headerCheck
308 subserver `addHeaderCheck` withRequest headerCheck
288 where
309 where
@@ -326,6 +347,8 @@ instance (KnownSymbol sym, FromHttpApiData a, HasServer api context)
326 type ServerT (QueryParam sym a :> api) m =
347 type ServerT (QueryParam sym a :> api) m =
327 Maybe a -> ServerT api m
348 Maybe a -> ServerT api m
328
349
350+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
351+
329 route Proxy context subserver =
352 route Proxy context subserver =
330 let querytext req = parseQueryText $ rawQueryString req
353 let querytext req = parseQueryText $ rawQueryString req
331 parseParam req =
354 parseParam req =
@@ -371,6 +394,8 @@ instance (KnownSymbol sym, FromHttpApiData a, HasServer api context)
371 type ServerT (QueryParams sym a :> api) m =
394 type ServerT (QueryParams sym a :> api) m =
372 [a] -> ServerT api m
395 [a] -> ServerT api m
373
396
397+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
398+
374 route Proxy context subserver = route (Proxy :: Proxy api) context $
399 route Proxy context subserver = route (Proxy :: Proxy api) context $
375 subserver `addParameterCheck` withRequest paramsCheck
400 subserver `addParameterCheck` withRequest paramsCheck
376 where
401 where
@@ -411,6 +436,8 @@ instance (KnownSymbol sym, HasServer api context)
411 type ServerT (QueryFlag sym :> api) m =
436 type ServerT (QueryFlag sym :> api) m =
412 Bool -> ServerT api m
437 Bool -> ServerT api m
413
438
439+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
440+
414 route Proxy context subserver =
441 route Proxy context subserver =
415 let querytext r = parseQueryText $ rawQueryString r
442 let querytext r = parseQueryText $ rawQueryString r
416 param r = case lookup paramname (querytext r) of
443 param r = case lookup paramname (querytext r) of
@@ -434,6 +461,8 @@ instance HasServer Raw context where
434
461
435 type ServerT Raw m = Tagged m Application
462 type ServerT Raw m = Tagged m Application
436
463
464+ hoistServer _ _ _ = retag
465+
437 route Proxy _ rawApplication = RawRouter $ \ env request respond -> runResourceT $ do
466 route Proxy _ rawApplication = RawRouter $ \ env request respond -> runResourceT $ do
438 -- note: a Raw application doesn't register any cleanup
467 -- note: a Raw application doesn't register any cleanup
439 -- but for the sake of consistency, we nonetheless run
468 -- but for the sake of consistency, we nonetheless run
@@ -473,6 +502,8 @@ instance ( AllCTUnrender list a, HasServer api context
473 type ServerT (ReqBody list a :> api) m =
502 type ServerT (ReqBody list a :> api) m =
474 a -> ServerT api m
503 a -> ServerT api m
475
504
505+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
506+
476 route Proxy context subserver
507 route Proxy context subserver
477 = route (Proxy :: Proxy api) context $
508 = route (Proxy :: Proxy api) context $
478 addBodyCheck subserver ctCheck bodyCheck
509 addBodyCheck subserver ctCheck bodyCheck
@@ -507,44 +538,51 @@ instance (KnownSymbol path, HasServer api context) => HasServer (path :> api) co
507 (cs (symbolVal proxyPath))
538 (cs (symbolVal proxyPath))
508 (route (Proxy :: Proxy api) context subserver)
539 (route (Proxy :: Proxy api) context subserver)
509 where proxyPath = Proxy :: Proxy path
540 where proxyPath = Proxy :: Proxy path
541+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt s
510
542
511instance HasServer api context => HasServer (RemoteHost :> api) context where
543instance HasServer api context => HasServer (RemoteHost :> api) context where
512 type ServerT (RemoteHost :> api) m = SockAddr -> ServerT api m
544 type ServerT (RemoteHost :> api) m = SockAddr -> ServerT api m
513
545
514 route Proxy context subserver =
546 route Proxy context subserver =
515 route (Proxy :: Proxy api) context (passToServer subserver remoteHost)
547 route (Proxy :: Proxy api) context (passToServer subserver remoteHost)
548+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
516
549
517instance HasServer api context => HasServer (IsSecure :> api) context where
550instance HasServer api context => HasServer (IsSecure :> api) context where
518 type ServerT (IsSecure :> api) m = IsSecure -> ServerT api m
551 type ServerT (IsSecure :> api) m = IsSecure -> ServerT api m
519
552
520 route Proxy context subserver =
553 route Proxy context subserver =
521 route (Proxy :: Proxy api) context (passToServer subserver secure)
554 route (Proxy :: Proxy api) context (passToServer subserver secure)
522−
523 where secure req = if isSecure req then Secure else NotSecure
555 where secure req = if isSecure req then Secure else NotSecure
524
556
557+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
558+
525instance HasServer api context => HasServer (Vault :> api) context where
559instance HasServer api context => HasServer (Vault :> api) context where
526 type ServerT (Vault :> api) m = Vault -> ServerT api m
560 type ServerT (Vault :> api) m = Vault -> ServerT api m
527
561
528 route Proxy context subserver =
562 route Proxy context subserver =
529 route (Proxy :: Proxy api) context (passToServer subserver vault)
563 route (Proxy :: Proxy api) context (passToServer subserver vault)
564+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
530
565
531instance HasServer api context => HasServer (HttpVersion :> api) context where
566instance HasServer api context => HasServer (HttpVersion :> api) context where
532 type ServerT (HttpVersion :> api) m = HttpVersion -> ServerT api m
567 type ServerT (HttpVersion :> api) m = HttpVersion -> ServerT api m
533
568
534 route Proxy context subserver =
569 route Proxy context subserver =
535 route (Proxy :: Proxy api) context (passToServer subserver httpVersion)
570 route (Proxy :: Proxy api) context (passToServer subserver httpVersion)
571+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
536
572
537-- | Ignore @'Summary'@ in server handlers.
573-- | Ignore @'Summary'@ in server handlers.
538instance HasServer api ctx => HasServer (Summary desc :> api) ctx where
574instance HasServer api ctx => HasServer (Summary desc :> api) ctx where
539 type ServerT (Summary desc :> api) m = ServerT api m
575 type ServerT (Summary desc :> api) m = ServerT api m
540
576
541 route _ = route (Proxy :: Proxy api)
577 route _ = route (Proxy :: Proxy api)
578+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt s
542
579
543-- | Ignore @'Description'@ in server handlers.
580-- | Ignore @'Description'@ in server handlers.
544instance HasServer api ctx => HasServer (Description desc :> api) ctx where
581instance HasServer api ctx => HasServer (Description desc :> api) ctx where
545 type ServerT (Description desc :> api) m = ServerT api m
582 type ServerT (Description desc :> api) m = ServerT api m
546
583
547 route _ = route (Proxy :: Proxy api)
584 route _ = route (Proxy :: Proxy api)
585+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt s
548
586
549-- | Singleton type representing a server that serves an empty API.
587-- | Singleton type representing a server that serves an empty API.
550data EmptyServer = EmptyServer deriving (Typeable, Eq, Show, Bounded, Enum)
588data EmptyServer = EmptyServer deriving (Typeable, Eq, Show, Bounded, Enum)
@@ -564,6 +602,8 @@ instance HasServer EmptyAPI context where
564
602
565 route Proxy _ _ = StaticRouter mempty mempty
603 route Proxy _ _ = StaticRouter mempty mempty
566
604
605+ hoistServer _ _ _ = retag
606+
567-- | Basic Authentication
607-- | Basic Authentication
568instance ( KnownSymbol realm
608instance ( KnownSymbol realm
569 , HasServer api context
609 , HasServer api context
@@ -580,6 +620,8 @@ instance ( KnownSymbol realm
580 basicAuthContext = getContextEntry context
620 basicAuthContext = getContextEntry context
581 authCheck = withRequest $ \ req -> runBasicAuth req realm basicAuthContext
621 authCheck = withRequest $ \ req -> runBasicAuth req realm basicAuthContext
582
622
623+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy api) pc nt . s
624+
583-- * helpers
625-- * helpers
584
626
585ct_wildcard :: B.ByteString
627ct_wildcard :: B.ByteString
@@ -604,3 +646,5 @@ instance (HasContextEntry context (NamedContext name subContext), HasServer subA
604
646
605 subContext :: Context subContext
647 subContext :: Context subContext
606 subContext = descendIntoNamedContext (Proxy :: Proxy name) context
648 subContext = descendIntoNamedContext (Proxy :: Proxy name) context
649+
650+ hoistServer _ _ nt s = hoistServer (Proxy :: Proxy subApi) (Proxy :: Proxy subContext) nt s
servant-server/test/Servant/Server/Internal/RoutingApplicationSpec.hs+3
@@ -88,6 +88,9 @@ data Res (sym :: Symbol)
88
88
89instance (KnownSymbol sym, HasServer api ctx) => HasServer (Res sym :> api) ctx where
89instance (KnownSymbol sym, HasServer api ctx) => HasServer (Res sym :> api) ctx where
90 type ServerT (Res sym :> api) m = IORef (TestResource String) -> ServerT api m
90 type ServerT (Res sym :> api) m = IORef (TestResource String) -> ServerT api m
91+
92+ hoistServer _ nc nt s = hoistServer (Proxy :: Proxy api) nc nt . s
93+
91 route Proxy ctx server = route (Proxy :: Proxy api) ctx $
94 route Proxy ctx server = route (Proxy :: Proxy api) ctx $
92 addBodyCheck server (return ()) check
95 addBodyCheck server (return ()) check
93 where
96 where
servant-server/test/Servant/Server/UsingContextSpec/TestCombinators.hs+8
@@ -29,6 +29,8 @@ instance (HasContextEntry context String, HasServer subApi context) =>
29 type ServerT (ExtractFromContext :> subApi) m =
29 type ServerT (ExtractFromContext :> subApi) m =
30 String -> ServerT subApi m
30 String -> ServerT subApi m
31
31
32+ hoistServer _ pc nt s = hoistServer (Proxy :: Proxy subApi) pc nt . s
33+
32 route Proxy context delayed =
34 route Proxy context delayed =
33 route subProxy context (fmap inject delayed)
35 route subProxy context (fmap inject delayed)
34 where
36 where
@@ -45,6 +47,9 @@ instance (HasServer subApi (String ': context)) =>
45 type ServerT (InjectIntoContext :> subApi) m =
47 type ServerT (InjectIntoContext :> subApi) m =
46 ServerT subApi m
48 ServerT subApi m
47
49
50+ hoistServer _ _ nt s =
51+ hoistServer (Proxy :: Proxy subApi) (Proxy :: Proxy (String ': context)) nt s
52+
48 route Proxy context delayed =
53 route Proxy context delayed =
49 route subProxy newContext delayed
54 route subProxy newContext delayed
50 where
55 where
@@ -61,6 +66,9 @@ instance (HasContextEntry context (NamedContext name subContext), HasServer subA
61 type ServerT (NamedContextWithBirdface name subContext :> subApi) m =
66 type ServerT (NamedContextWithBirdface name subContext :> subApi) m =
62 ServerT subApi m
67 ServerT subApi m
63
68
69+ hoistServer _ _ nt s =
70+ hoistServer (Proxy :: Proxy subApi) (Proxy :: Proxy subContext) nt s
71+
64 route Proxy context delayed =
72 route Proxy context delayed =
65 route subProxy subContext delayed
73 route subProxy subContext delayed
66 where
74 where
stack-ghc-8.2.1.yaml+1−186
@@ -1,192 +1,7 @@
1−resolver: ghc-8.2.0.20170507
1+resolver: nightly-2017-09-01
2packages:
2packages:
3- servant-client/
3- servant-client/
4- servant-docs/
4- servant-docs/
5- servant-foreign/
5- servant-foreign/
6- servant-server/
6- servant-server/
7- servant/
7- servant/
8−extra-deps:
9−- abstract-deque-0.3
10−- abstract-par-0.3.3
11−- adjunctions-4.3
12−- aeson-1.2.0.0
13−- aeson-compat-0.3.7
14−- aeson-pretty-0.8.4
15−- ansi-terminal-0.6.3.1
16−- ansi-wl-pprint-0.6.7.3
17−- appar-0.1.4
18−- asn1-encoding-0.9.5
19−- asn1-parse-0.9.4
20−- asn1-types-0.3.2
21−- async-2.1.1.1
22−- attoparsec-0.13.1.0
23−- attoparsec-iso8601-1.0.0.0
24−- auto-update-0.1.4
25−- base-compat-0.9.3
26−- base-orphans-0.6
27−- base64-bytestring-1.0.0.1
28−- bifunctors-5.4.2
29−- blaze-builder-0.4.0.2
30−- blaze-html-0.9.0.1
31−- blaze-markup-0.8.0.0
32−- byteable-0.1.1
33−- byteorder-1.0.4
34−- bytestring-builder-0.10.8.1.0
35−- cabal-doctest-1.0.2
36−- call-stack-0.1.0
37−- case-insensitive-1.2.0.10
38−- cassava-0.4.5.1
39−- cereal-0.5.4.0
40−- clock-0.7.2
41−- cmdargs-0.10.17
42−- code-page-0.1.3
43−- comonad-5.0.1
44−- connection-0.2.8
45−- contravariant-1.4
46−- control-monad-omega-0.3.1
47−- cookie-0.4.2.1
48−- criterion-1.2.0.0
49−- cryptonite-0.23
50−- data-default-class-0.1.2.0
51−- deepseq-generics-0.2.0.0
52−- distributive-0.5.2
53−- dlist-0.8.0.2
54−- doctest-0.11.2
55−- easy-file-0.2.1
56−- erf-2.0.0.0
57−- exceptions-0.8.3
58−- fail-4.9.0.0
59−- fast-logger-2.4.10
60−- file-embed-0.0.10
61−- filemanip-0.3.6.3
62−- foundation-0.0.9
63−- free-4.12.4
64−- generics-sop-0.3.0.0
65−- ghc-paths-0.1.0.9
66−- Glob-0.8.0
67−- hashable-1.2.6.0
68−- hex-0.1.2
69−- hourglass-0.2.10
70−- hspec-2.4.3
71−- hspec-core-2.4.3
72−- hspec-discover-2.4.3
73−- hspec-expectations-0.8.2
74−- hspec-wai-0.8.0
75−- http-api-data-0.3.7.1
76−- http-client-0.5.7.0
77−- http-client-tls-0.3.5
78−- http-date-0.0.6.1
79−- http-media-0.6.4
80−- http-types-0.9.1
81−- http2-1.6.3
82−- HUnit-1.6.0.0
83−- integer-logarithms-1.0.1
84−- iproute-1.7.1
85−- js-flot-0.8.3
86−- js-jquery-3.2.1
87−- kan-extensions-5.0.2
88−- lens-4.15.2
89−- lifted-base-0.2.3.11
90−- math-functions-0.2.1.0
91−- memory-0.14.5
92−- microstache-1
93−- mime-types-0.1.0.7
94−- mmorph-1.1.0
95−- monad-control-1.0.1.0
96−- monad-par-0.3.4.8
97−- monad-par-extras-0.3.3
98−- mtl-2.2.1
99−- mwc-random-0.13.6.0
100−- nats-1.1.1
101−- natural-transformation-0.4
102−- network-2.6.3.2
103−- network-uri-2.6.1.0
104−- old-locale-1.0.0.7
105−- old-time-1.1.0.3
106−- optparse-applicative-0.13.2.0
107−- parallel-3.2.1.1
108−- parsec-3.1.11
109−- pem-0.2.2
110−- prelude-extras-0.4.0.3
111−- primitive-0.6.2.0
112−- profunctors-5.2
113−- psqueues-0.2.2.3
114−- QuickCheck-2.9.2
115−- quickcheck-instances-0.3.13
116−- quickcheck-io-0.1.4
117−- random-1.1
118−- reflection-2.1.2
119−- regex-base-0.93.2
120−- regex-tdfa-1.2.2
121−- resourcet-1.1.9
122−- safe-0.3.14
123−- scientific-0.3.4.13
124−- semigroupoids-5.2
125−- semigroups-0.18.3
126−- setenv-0.1.1.3
127−- should-not-typecheck-2.1.0
128−- simple-sendfile-0.2.25
129−- socks-0.5.5
130−- split-0.2.3.2
131−- StateVar-1.1.0.4
132−- statistics-0.14.0.2
133−- stm-2.4.4.1
134−- streaming-commons-0.1.18
135−- string-conversions-0.4.0.1
136−- stringsearch-0.3.6.6
137−- syb-0.7
138−- system-filepath-0.4.13.4
139−- tagged-0.8.5
140−- tasty-0.11.2.1
141−- tasty-hunit-0.9.2
142−- tasty-quickcheck-0.8.4
143−- temporary-1.2.0.4
144−- text-1.2.2.2
145−- tf-random-0.5
146−- th-lift-0.7.7
147−- th-lift-instances-0.1.11
148−- time-locale-compat-0.1.1.3
149−- tls-1.3.10
150−- transformers-base-0.4.4
151−- transformers-compat-0.5.1.4
152−- unbounded-delays-0.1.1.0
153−- unix-compat-0.4.3.1
154−- unix-time-0.3.7
155−- unordered-containers-0.2.8.0
156−- uri-bytestring-0.2.3.3
157−- url-2.1.3
158−- utf8-string-1.0.1.1
159−- uuid-types-1.0.3
160−- vault-0.3.0.7
161−- vector-0.12.0.1
162−- vector-algorithms-0.7.0.1
163−- vector-binary-instances-0.2.3.5
164−- vector-th-unbox-0.2.1.6
165−- void-0.7.2
166−- wai-3.2.1.1
167−- wai-app-static-3.1.6.1
168−- wai-extra-3.0.19.1
169−- wai-logger-2.3.0
170−- warp-3.2.12
171−- word8-0.1.2
172−- x509-1.6.5
173−- x509-store-1.6.2
174−- x509-system-1.6.4
175−- x509-validation-1.6.5
176−- zlib-0.6.1.2
177−flags:
178− time-locale-compat:
179− old-locale: false
180−compiler: ghc-8.2.0.20170507
181−compiler-check: match-exact
182−setup-info:
183− ghc:
184− linux64:
185− 8.2.0.20170507:
186− url: https://downloads.haskell.org/~ghc/8.2.1-rc2/ghc-8.2.0.20170507-x86_64-deb8-linux.tar.xz
187− macosx:
188− 8.2.0.20170507:
189− url: https://downloads.haskell.org/~ghc/8.2.1-rc2/ghc-8.2.0.20170507-x86_64-apple-darwin.tar.xz
190− windows64:
191− 8.2.0.20170507:
192− url: https://downloads.haskell.org/~ghc/8.2.1-rc2/ghc-8.2.0.20170507-x86_64-unknown-mingw32.tar.xz