aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2017-09-03 21:24:45 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2017-09-03 21:24:45 +0200
commit2ab4ee48a15da128536b27c77a224c08cd2e9b78 (patch)
treead409d465a1f1f69e5423f2c784fd9d60c6b0f13
parentcbe2b674b3a9297321dfb62cf294bb0f270ea731 (diff)
downloadthermoprint-2ab4ee48a15da128536b27c77a224c08cd2e9b78.tar
thermoprint-2ab4ee48a15da128536b27c77a224c08cd2e9b78.tar.gz
thermoprint-2ab4ee48a15da128536b27c77a224c08cd2e9b78.tar.bz2
thermoprint-2ab4ee48a15da128536b27c77a224c08cd2e9b78.tar.xz
thermoprint-2ab4ee48a15da128536b27c77a224c08cd2e9b78.zip
Fix build
-rw-r--r--client/src/Thermoprint/Client.hs28
-rw-r--r--client/thermoprint-client.cabal1
-rw-r--r--client/thermoprint-client.nix9
-rw-r--r--default.nix43
4 files changed, 48 insertions, 33 deletions
diff --git a/client/src/Thermoprint/Client.hs b/client/src/Thermoprint/Client.hs
index 46f6073..8c4d99d 100644
--- a/client/src/Thermoprint/Client.hs
+++ b/client/src/Thermoprint/Client.hs
@@ -5,7 +5,10 @@
5{-# LANGUAGE RecordWildCards #-} 5{-# LANGUAGE RecordWildCards #-}
6{-# LANGUAGE FlexibleContexts #-} 6{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE FlexibleInstances #-} 7{-# LANGUAGE FlexibleInstances #-}
8{-# LANGUAGE MultiParamTypeClasses #-}
8{-# LANGUAGE RankNTypes #-} 9{-# LANGUAGE RankNTypes #-}
10{-# LANGUAGE FunctionalDependencies #-}
11{-# LANGUAGE UndecidableInstances #-}
9 12
10-- | A client library for 'Thermoprint.API' 13-- | A client library for 'Thermoprint.API'
11module Thermoprint.Client 14module Thermoprint.Client
@@ -16,7 +19,7 @@ module Thermoprint.Client
16 , module Thermoprint.API 19 , module Thermoprint.API
17 , module Servant.Common.BaseUrl 20 , module Servant.Common.BaseUrl
18 , module Control.Monad.Except 21 , module Control.Monad.Except
19 , module Servant.Utils.Enter 22 , module Control.Natural
20 ) where 23 ) where
21 24
22import Thermoprint.API 25import Thermoprint.API
@@ -30,7 +33,8 @@ import Servant.Common.BaseUrl
30import Servant.Common.Req 33import Servant.Common.Req
31import Network.HTTP.Client (Manager, ManagerSettings, newManager, defaultManagerSettings) 34import Network.HTTP.Client (Manager, ManagerSettings, newManager, defaultManagerSettings)
32import Servant.API 35import Servant.API
33import Servant.Utils.Enter 36-- import Servant.Utils.Enter
37import Control.Natural ((:~>)(..))
34import Control.Monad.Except (ExceptT(..), runExceptT) 38import Control.Monad.Except (ExceptT(..), runExceptT)
35 39
36import Control.Monad.Reader (ReaderT, runReaderT, ask) 40import Control.Monad.Reader (ReaderT, runReaderT, ask)
@@ -42,6 +46,20 @@ import Control.Monad
42import Control.Category 46import Control.Category
43import Prelude hiding (id, (.)) 47import Prelude hiding (id, (.))
44 48
49
50class Enter typ mod ret | typ mod -> ret, typ ret -> mod, mod ret -> typ where
51 enter :: mod -> typ -> ret
52
53instance Enter (m a) (m :~> n) (n a) where
54 enter (NT f) = f
55
56instance (Enter typ1 mod1 ret1, Enter typ2 mod2 ret2, mod1 ~ mod2) => Enter (typ1 :<|> typ2) mod1 (ret1 :<|> ret2) where
57 enter mod (a :<|> b) = enter mod a :<|> enter mod b
58
59instance Enter typ mod ret => Enter (r -> typ) mod (r -> ret) where
60 enter mod = (enter mod .)
61
62
45-- | All 'ThermoprintAPI'-functions as a record 63-- | All 'ThermoprintAPI'-functions as a record
46-- 64--
47-- Use like this: 65-- Use like this:
@@ -105,10 +123,10 @@ mkClientS n = Client{..}
105 = enter n $ client thermoprintAPI 123 = enter n $ client thermoprintAPI
106 124
107mkClient :: (MonadThrow m, MonadIO m) => ManagerSettings -> BaseUrl -> Client m 125mkClient :: (MonadThrow m, MonadIO m) => ManagerSettings -> BaseUrl -> Client m
108mkClient mSettings url = mkClientS $ Nat clientNat 126mkClient mSettings url = mkClientS clientNat
109 where 127 where
110 clientNat :: forall m a. (MonadThrow m, MonadIO m) => ClientM a -> m a 128 clientNat :: forall m. (MonadThrow m, MonadIO m) => ClientM :~> m
111 clientNat cAct = do 129 clientNat = NT $ \cAct -> do
112 mgr <- liftIO $ newManager mSettings 130 mgr <- liftIO $ newManager mSettings
113 either throwM return =<< liftIO (runClientM cAct $ ClientEnv mgr url) 131 either throwM return =<< liftIO (runClientM cAct $ ClientEnv mgr url)
114 132
diff --git a/client/thermoprint-client.cabal b/client/thermoprint-client.cabal
index 1306542..523b755 100644
--- a/client/thermoprint-client.cabal
+++ b/client/thermoprint-client.cabal
@@ -32,6 +32,7 @@ library
32 , transformers >=0.4.2 && <1 32 , transformers >=0.4.2 && <1
33 , http-client >=0.4.28 && <1 33 , http-client >=0.4.28 && <1
34 , mtl >=2.2.1 && <3 34 , mtl >=2.2.1 && <3
35 , natural-transformation >=0.4 && <1
35 hs-source-dirs: src 36 hs-source-dirs: src
36 default-language: Haskell2010 37 default-language: Haskell2010
37 ghc-options: -Wall 38 ghc-options: -Wall
diff --git a/client/thermoprint-client.nix b/client/thermoprint-client.nix
index 7f83630..0046a0f 100644
--- a/client/thermoprint-client.nix
+++ b/client/thermoprint-client.nix
@@ -1,14 +1,15 @@
1{ mkDerivation, base, containers, either, exceptions, http-client 1{ mkDerivation, base, containers, either, exceptions, http-client
2, mtl, servant, servant-client, servant-server, stdenv 2, mtl, natural-transformation, servant, servant-client
3, thermoprint-spec, time, transformers 3, servant-server, stdenv, thermoprint-spec, time, transformers
4}: 4}:
5mkDerivation { 5mkDerivation {
6 pname = "thermoprint-client"; 6 pname = "thermoprint-client";
7 version = "2.0.0"; 7 version = "2.0.0";
8 src = ./.; 8 src = ./.;
9 libraryHaskellDepends = [ 9 libraryHaskellDepends = [
10 base containers either exceptions http-client mtl servant 10 base containers either exceptions http-client mtl
11 servant-client servant-server thermoprint-spec time transformers 11 natural-transformation servant servant-client servant-server
12 thermoprint-spec time transformers
12 ]; 13 ];
13 homepage = "http://dirty-haskell.org/tags/thermoprint.html"; 14 homepage = "http://dirty-haskell.org/tags/thermoprint.html";
14 description = "Client for thermoprint-spec"; 15 description = "Client for thermoprint-spec";
diff --git a/default.nix b/default.nix
index 4e65886..2b84d30 100644
--- a/default.nix
+++ b/default.nix
@@ -1,10 +1,12 @@
1{ pkgs ? (import <nixpkgs> {}) 1args@{
2, compilerName ? "ghc802" 2 compilerName ? "ghc802"
3, extraPackages ? (p: []) 3, extraPackages ? (p: [])
4, ...
4}: 5}:
5 6
6rec { 7let
7 haskellPackages = pkgs.haskell.packages."${compilerName}".override { 8 defaultPackages = import <nixpkgs> {};
9 haskellPackages = defaultPackages.haskell.packages."${compilerName}".override {
8 overrides = self: super: with super; { 10 overrides = self: super: with super; {
9 # threepenny-gui = pkgs.haskell.lib.appendPatch threepenny-gui ./threepenny.patch; 11 # threepenny-gui = pkgs.haskell.lib.appendPatch threepenny-gui ./threepenny.patch;
10 encoding = pkgs.haskell.lib.doJailbreak encoding; 12 encoding = pkgs.haskell.lib.doJailbreak encoding;
@@ -12,25 +14,18 @@ rec {
12 extended-reals = pkgs.haskell.lib.doJailbreak extended-reals; 14 extended-reals = pkgs.haskell.lib.doJailbreak extended-reals;
13 }; 15 };
14 }; 16 };
15 thermoprint-spec = haskellPackages.callPackage ./spec/thermoprint-spec.nix {}; 17 pkgs = defaultPackages // haskellPackages // args;
16 thermoprint-bbcode = haskellPackages.callPackage ./tp-bbcode/thermoprint-bbcode.nix { 18 callPackage = pkgs.lib.callPackageWith (pkgs // self);
17 inherit bbcode thermoprint-spec; 19 self = {
18 }; 20 thermoprint-spec = callPackage ./spec/thermoprint-spec.nix {};
19 thermoprint-client = haskellPackages.callPackage ./client/thermoprint-client.nix { 21 thermoprint-bbcode = callPackage ./tp-bbcode/thermoprint-bbcode.nix {};
20 inherit thermoprint-spec; 22 thermoprint-client = callPackage ./client/thermoprint-client.nix {};
21 }; 23 thermoprint-server = callPackage ./server/wrapped.nix {
22 thermoprint-server = pkgs.callPackage ./server/wrapped.nix { 24 inherit extraPackages;
23 inherit (haskellPackages) ghcWithPackages; 25 thermoprint-server = callPackage ./server/thermoprint-server.nix {};
24 inherit extraPackages;
25 thermoprint-server = haskellPackages.callPackage ./server/thermoprint-server.nix {
26 inherit thermoprint-spec thermoprint-client;
27 }; 26 };
27 thermoprint-webgui = callPackage ./webgui/thermoprint-webgui.nix {};
28 tprint = callPackage ./tprint/tprint.nix {};
29 bbcode = callPackage ./bbcode/bbcode.nix {};
28 }; 30 };
29 thermoprint-webgui = haskellPackages.callPackage ./webgui/thermoprint-webgui.nix { 31in self
30 inherit thermoprint-bbcode thermoprint-client;
31 };
32 tprint = haskellPackages.callPackage ./tprint/tprint.nix {
33 inherit thermoprint-bbcode thermoprint-client;
34 };
35 bbcode = haskellPackages.callPackage ./bbcode/bbcode.nix {};
36}