Added haskell-language-server support in nix-shell (#4)

This commit is contained in:
iko 2020-12-11 16:31:46 +03:00
parent 3af33a79d9
commit 47495459e3
13 changed files with 453 additions and 86 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"nixEnvSelector.nixShellConfig": "${workspaceRoot}/shell.nix"
}

View File

@ -1,54 +1,38 @@
{ sources ? import ./nix/sources.nix
, reflex-platform ? sources.reflex-platform
, hls ? false
}:
(import reflex-platform { }).project ({ pkgs, ... }: {
useWarp = true;
(import reflex-platform { }).project ({ pkgs, ... }:
let foldOs = pkgs.lib.foldl' pkgs.lib.composeExtensions (self: super: { });
in
{
useWarp = true;
packages = {
octopod-common = ./octopod-common;
octopod-frontend = ./octopod-frontend;
octopod-backend = ./octopod-backend;
octo-cli = ./octo-cli;
octopod-api = ./octopod-api;
};
packages = {
octopod-common = ./octopod-common;
octopod-frontend = ./octopod-frontend;
octopod-backend = ./octopod-backend;
octo-cli = ./octo-cli;
octopod-api = ./octopod-api;
};
overrides = hself: hsuper: {
servant-reflex = hsuper.callCabal2nix "servant-reflex" sources.servant-reflex { };
tabulation = hsuper.callCabal2nix "tabulation" "${sources.obelisk}/lib/tabulation" { };
obelisk-executable-config-lookup = hsuper.callCabal2nix "obelisk-executable-config-lookup" "${sources.obelisk}/lib/executable-config/lookup" { };
obelisk-route = hsuper.callCabal2nix "obelisk-route" "${sources.obelisk}/lib/route" { };
hspec-webdriver = hsuper.callCabal2nix "hspec-webdriver" sources.hspec-webdriver-clone { };
servant = pkgs.haskell.lib.overrideCabal hsuper.servant (old: {
postInstall = "";
});
servant-websockets = hsuper.callHackageDirect
{
pkg = "servant-websockets";
ver = "2.0.0";
sha256 = "01bmwg3ysj8gijcqghykxfsd62sqz1pfby2irpzh5ybwyh285pvg";
} { };
deriving-aeson = hsuper.callHackageDirect
{
pkg = "deriving-aeson";
ver = "0.2.3";
sha256 = "0ckwdi9pr4aqp9psag4mdbx30nygxkkpdf21rg9rfz16cz8079j7";
} { };
table-layout = hsuper.callHackageDirect
{
pkg = "table-layout";
ver = "0.9.0.1";
sha256 = "12nllfnh6b5mjda9qxfy192v0r0sx181w9zc9j70kvjdn7hgrb0y";
} { };
data-default-instances-base = hsuper.callHackageDirect
{
pkg = "data-default-instances-base";
ver = "0.1.0.1";
sha256 = "18basdy4qjn246phw008ll9zbi3rpdn6bh2dk0i81a60gsmyn58q";
} { };
};
shells = {
ghc = [ "octopod-common" "octopod-backend" "octopod-frontend" "octopod-api" "octo-cli" ];
ghcjs = [ "octopod-common" "octopod-frontend" ];
};
})
overrides = foldOs [
(import ./nix/haskell-language-server-overrides.nix {
inherit (pkgs.haskell) lib;
inherit sources;
}
)
(import ./nix/octopod-overrides.nix {
inherit (pkgs.haskell) lib;
inherit sources;
}
)
];
shellToolOverrides = ghc: super:
if hls then { inherit (ghc) haskell-language-server; }
else { };
shells = {
ghc = [ "octopod-common" "octopod-backend" "octopod-frontend" "octopod-api" "octo-cli" ];
ghcjs = [ "octopod-common" "octopod-frontend" ];
};
})

View File

@ -1,13 +1,13 @@
cradle:
stack:
cabal:
- path: "octo-cli/src"
component: "octo-cli:exe:octo"
- path: "octopod-api/src"
component: "octopod-api:lib"
component: "lib:octopod-api"
- path: "octopod-backend/src"
component: "octopod-backend:lib"
component: "lib:octopod-backend"
- path: "octopod-backend/app"
component: "octopod-backend:exe:octopod-exe"
@ -16,4 +16,7 @@ cradle:
component: "octopod-backend:test:octopod-test"
- path: "octopod-common/src"
component: "octopod-common:lib"
component: "lib:octopod-common"
- path: "octopod-frontend/src"
component: "octopod-frontend:exe:frontend"

View File

@ -0,0 +1,240 @@
{ lib, sources ? import ./sources.nix }: hself: hsuper:
{
haskell-language-server = lib.dontCheck (hsuper.callCabal2nix "haskell-language-server" (sources.haskell-language-server) { });
hls-hlint-plugin = hsuper.callCabal2nix "hls-hlint-plugin" (sources.haskell-language-server + "/plugins/hls-hlint-plugin") { };
hls-explicit-imports-plugin = hsuper.callCabal2nix "hls-explicit-imports-plugin" (sources.haskell-language-server + "/plugins/hls-explicit-imports-plugin") { };
hls-retrie-plugin = hsuper.callCabal2nix "hls-retrie-plugin" (sources.haskell-language-server + "/plugins/hls-retrie-plugin") { };
hls-plugin-api = hsuper.callCabal2nix "hls-plugin-api" (sources.haskell-language-server + "/hls-plugin-api") { };
hls-tactics-plugin = hsuper.callCabal2nix "hls-tactics-plugin" (sources.haskell-language-server + "/plugins/tactics") { };
ghcide = lib.dontCheck (hsuper.callCabal2nix "ghcide" sources.ghcide { });
hie-compat = hsuper.callCabal2nix "hie-compat" (sources.ghcide + "/hie-compat") { };
fourmolu = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "fourmolu";
ver = "0.3.0.0";
sha256 = "sha256-SFBwhkXfDArITiBSxGSp2qf8gl+yBpWHglBB5aKeaBU=";
} { }
);
ormolu =
hsuper.callHackageDirect
{
pkg = "ormolu";
ver = "0.1.4.1";
sha256 = "07gfag591dsys33q2i80f3afxjqny2zpiq4z35d1ajyp7di73m7z";
} { };
ghc-check =
hsuper.callHackageDirect
{
pkg = "ghc-check";
ver = "0.5.0.1";
sha256 = "1zlbss7h6infzhhpilvkpk50gxypkb2li8fspi69jlll5l7wqi3d";
} { };
implicit-hie-cradle =
hsuper.callHackageDirect
{
pkg = "implicit-hie-cradle";
ver = "0.3.0.2";
sha256 = "1fhc8zccd7g7ixka05cba3cd4qf5jvq1zif29bhn593dfkzy89lz";
} { };
implicit-hie =
hsuper.callHackageDirect
{
pkg = "implicit-hie";
ver = "0.1.2.5";
sha256 = "1l0rz4r4hamvmqlb68a7y4s3n73y6xx76zyprksd0pscd9axznnv";
} { };
lsp-test = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "lsp-test";
ver = "0.11.0.6";
sha256 = "19mbbkjpgpmkna26i4y1jvp305srv3kwa5b62x30rlb3rqf2vy5v";
} { }
);
floskell = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "floskell";
ver = "0.10.4";
sha256 = "0n1gy6yf7lzzh9l67712rr7bjliyifi9xjnc6i9rppiv5adj2xyf";
} { }
);
monad-dijkstra = lib.dontCheck (lib.doJailbreak (
hsuper.callHackageDirect
{
pkg = "monad-dijkstra";
ver = "0.1.1.2";
sha256 = "1vyw7az18yy5s9jwi3icq76zvi9myr0y9gja3jaywlykcdn6frsz";
} { }
));
HsYAML-aeson = lib.doJailbreak (
hsuper.callHackageDirect
{
pkg = "HsYAML-aeson";
ver = "0.2.0.0";
sha256 = "0zgcp93y93h7rsg9dv202hf3l6sqr95iadd67lmfclb0npfs640m";
} { }
);
ghc-lib-parser-ex =
hsuper.callHackageDirect
{
pkg = "ghc-lib-parser-ex";
ver = "8.10.0.16";
sha256 = "0dp8plj708ss3im6rmp41kpj0df71kjzpw1kqkpn0dhms9yr1g0x";
} { };
retrie = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "retrie";
ver = "0.1.1.1";
sha256 = "0gnp6j35jnk1gcglrymvvn13sawir0610vh0z8ya6599kyddmw7l";
} { }
);
ghc-lib =
hsuper.callHackageDirect
{
pkg = "ghc-lib";
ver = "8.10.2.20200916";
sha256 = "1gx0ijay9chachmd1fbb61md3zlvj24kk63fk3dssx8r9c2yp493";
} { };
ghc-lib-parser =
hsuper.callHackageDirect
{
pkg = "ghc-lib-parser";
ver = "8.10.2.20200916";
sha256 = "1apm9zn484sm6b8flbh6a2kqnv1wjan4l58b81cic5fc1jsqnyjk";
} { };
haskell-lsp =
hsuper.callHackageDirect
{
pkg = "haskell-lsp";
ver = "0.22.0.0";
sha256 = "1q3w46qcvzraxgmw75s7bl0qvb2fvff242r5vfx95sqska566b4m";
} { };
parser-combinators =
hsuper.callHackageDirect
{
pkg = "parser-combinators";
ver = "1.2.1";
sha256 = "1990d6c1zm2wq4w9521bx7l3arg4ly02hq1ass9n19gs273bxx5h";
} { };
haskell-lsp-types =
hsuper.callHackageDirect
{
pkg = "haskell-lsp-types";
ver = "0.22.0.0";
sha256 = "1apjclphi2v6ggrdnbc0azxbb1gkfj3x1vkwpc8qd6lsrbyaf0n8";
} { };
regex-tdfa =
hsuper.callHackageDirect
{
pkg = "regex-tdfa";
ver = "1.3.1.0";
sha256 = "1a0l7kdjzp98smfp969mgkwrz60ph24xy0kh2dajnymnr8vd7b8g";
} { };
regex-posix =
hsuper.callHackageDirect
{
pkg = "regex-posix";
ver = "0.96.0.0";
sha256 = "0js977ahpz10642sbpb55mw9h01pilai6z201wgkncgkg2d69hl3";
} { };
ansi-terminal =
hsuper.callHackageDirect
{
pkg = "ansi-terminal";
ver = "0.10.3";
sha256 = "1aa8lh7pl054kz7i59iym49s8w473nhdqgc3pq16cp5v4358hw5k";
} { };
ghc-exactprint =
hsuper.callHackageDirect
{
pkg = "ghc-exactprint";
ver = "0.6.3.2";
sha256 = "0l9piqqgdi8xd46nj1jizp0r0v526d7f61y05xm8k4aamjaj59d0";
} { };
stylish-haskell =
hsuper.callHackageDirect
{
pkg = "stylish-haskell";
ver = "0.12.2.0";
sha256 = "1ck8i550rvzbvzrm7dvgir73slai8zmvfppg3n5v4igi7y3jy0mr";
} { };
optparse-applicative =
hsuper.callHackageDirect
{
pkg = "optparse-applicative";
ver = "0.15.1.0";
sha256 = "1mii408cscjvids2xqdcy2p18dvanb0qc0q1bi7234r23wz60ajk";
} { };
shake = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "shake";
ver = "0.19.2";
sha256 = "03p5hq0sg13ii39j9hf3nvy8v20mkh8czb59djn6zrg7fypy9ivv";
} { }
);
regex-base =
hsuper.callHackageDirect
{
pkg = "regex-base";
ver = "0.94.0.0";
sha256 = "0x2ip8kn3sv599r7yc9dmdx7hgh5x632m45ga99ib5rnbn6kvn8x";
} { };
extra =
hsuper.callHackageDirect
{
pkg = "extra";
ver = "1.7.3";
sha256 = "08j4gg2n5cl7ycr943hmyfimgby0xhf5vp8nwrwflg6lrn1s388c";
} { };
quickcheck-instances =
hsuper.callHackageDirect
{
pkg = "quickcheck-instances";
ver = "0.3.22";
sha256 = "05mam3x4x7c881bqbq8lcbclmz914yziqh6s04icxzp12zq7c7ks";
} { };
apply-refact =
hsuper.callHackageDirect
{
pkg = "apply-refact";
ver = "0.8.2.1";
sha256 = "0nnprv5lbk7c8w1pa4kywk0cny6prjaml4vnw70s8v6c1r1dx2rx";
} { };
hlint =
hsuper.callHackageDirect
{
pkg = "hlint";
ver = "3.2";
sha256 = "0y2agj9y4nwhypv9ss97n26mc28pcynfynwilcyj2lwfabhr9pzc";
} { };
Diff =
hsuper.callHackageDirect
{
pkg = "Diff";
ver = "0.4.0";
sha256 = "1phz4cz7i53jx3d1bj0xnx8vpkk482g4ph044zv5c6ssirnzq3ng";
} { };
refinery = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "refinery";
ver = "0.3.0.0";
sha256 = "08s5pw6j3ncz96zfc2j0cna2zbf4vy7045d6jpzmq2sa161qnpgi";
} { }
);
hie-bios = lib.dontCheck (
hsuper.callHackageDirect
{
pkg = "hie-bios";
ver = "0.7.1";
sha256 = "137f1dy0fmlrzngwcmgnxghcih7f2rfq5bdnizbwy9534dn4dr42";
} { }
);
test-framework = lib.doJailbreak hsuper.test-framework;
aeson = lib.dontCheck hsuper.aeson;
tree-diff = lib.doJailbreak hsuper.tree-diff;
brittany = hsuper.callCabal2nix "brittany" sources.brittany { };
}

View File

@ -4,6 +4,7 @@
, static-haskell-nix ? sources.static-haskell-nix
}:
let
foldOs = normalPkgs.lib.foldl' normalPkgs.lib.composeExtensions (self: super: { });
normalPkgs = import pkgs-expr {
overlays = [
(self: super: {
@ -11,24 +12,18 @@ let
packages = super.haskell.packages // {
"${compiler}" = super.haskell.packages."${compiler}".override {
overrides =
(hself: hsuper: {
octo-cli = hsuper.callCabal2nix "octo-cli" ../octo-cli { };
octopod-api = hsuper.callCabal2nix "octopod-api" ../octopod-api { };
octopod-common = hsuper.callCabal2nix "octopod-common" ../octopod-common { };
hspec-wai = hsuper.callHackage "hspec-wai" "0.9.2" { };
table-layout = hsuper.callHackageDirect
{
pkg = "table-layout";
ver = "0.9.0.1";
sha256 = "12nllfnh6b5mjda9qxfy192v0r0sx181w9zc9j70kvjdn7hgrb0y";
} { };
data-default-instances-base = hsuper.callHackageDirect
{
pkg = "data-default-instances-base";
ver = "0.1.0.1";
sha256 = "18basdy4qjn246phw008ll9zbi3rpdn6bh2dk0i81a60gsmyn58q";
} { };
});
foldOs [
(import ./octopod-overrides.nix {
inherit (normalPkgs.haskell) lib;
inherit sources;
}
)
(hself: hsuper: {
octo-cli = hsuper.callCabal2nix "octo-cli" ../octo-cli { };
octopod-api = hsuper.callCabal2nix "octopod-api" ../octopod-api { };
octopod-common = hsuper.callCabal2nix "octopod-common" ../octopod-common { };
})
];
};
};
};

91
nix/octopod-overrides.nix Normal file
View File

@ -0,0 +1,91 @@
{ lib, sources ? import ./sources.nix }: hself: hsuper:
{
tabulation = hsuper.callCabal2nix "tabulation" "${sources.obelisk}/lib/tabulation" { };
obelisk-executable-config-lookup = hsuper.callCabal2nix "obelisk-executable-config-lookup" "${sources.obelisk}/lib/executable-config/lookup" { };
obelisk-route = hsuper.callCabal2nix "obelisk-route" "${sources.obelisk}/lib/route" { };
hspec-webdriver = hsuper.callCabal2nix "hspec-webdriver" sources.hspec-webdriver-clone { };
servant-reflex = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "servant-reflex";
ver = "0.3.5";
sha256 = "1cj5b7hl4jhsqxfg8vdw50z8zvfxkj42f41hmyx217w6bv3s3fdb";
} { }
);
servant = hsuper.callHackageDirect
{
pkg = "servant";
ver = "0.18.2";
sha256 = "0l2k895nxvw2ngr9201g3br6s9zab7mk5mhpjibyg8mxfbv75a8y";
} { };
servant-client-core = hsuper.callHackageDirect
{
pkg = "servant-client-core";
ver = "0.18.2";
sha256 = "1hazxk1laklpm2c65zgkk2gn8mvlp682437071s04bqggk9b59sx";
} { };
servant-server = hsuper.callHackageDirect
{
pkg = "servant-server";
ver = "0.18.2";
sha256 = "1kynxl7qg5z45bhi0k61sxn79xkgnq1z97ccqqs39wjyf45fj5yy";
} { };
servant-client = hsuper.callHackageDirect
{
pkg = "servant-client";
ver = "0.18.2";
sha256 = "0yip2s63ivrlrpficdipq60j2a6czg8agn18lpkkaxf3n55j4jr3";
} { };
servant-websockets = hsuper.callHackageDirect
{
pkg = "servant-websockets";
ver = "2.0.0";
sha256 = "01bmwg3ysj8gijcqghykxfsd62sqz1pfby2irpzh5ybwyh285pvg";
} { };
deriving-aeson = hsuper.callHackageDirect
{
pkg = "deriving-aeson";
ver = "0.2.3";
sha256 = "0ckwdi9pr4aqp9psag4mdbx30nygxkkpdf21rg9rfz16cz8079j7";
} { };
table-layout = hsuper.callHackageDirect
{
pkg = "table-layout";
ver = "0.9.0.1";
sha256 = "12nllfnh6b5mjda9qxfy192v0r0sx181w9zc9j70kvjdn7hgrb0y";
} { };
data-default-instances-base = hsuper.callHackageDirect
{
pkg = "data-default-instances-base";
ver = "0.1.0.1";
sha256 = "18basdy4qjn246phw008ll9zbi3rpdn6bh2dk0i81a60gsmyn58q";
} { };
postgresql-simple = hsuper.callHackageDirect
{
pkg = "postgresql-simple";
ver = "0.6.3";
sha256 = "16kk1bc23gc23cd79c2iy90zh03x5n6b9r2kinjspy7hl9jlzs2a";
} { };
concurrent-output = hsuper.callHackageDirect
{
pkg = "concurrent-output";
ver = "1.10.12";
sha256 = "1ysvahlf6frjfxpv6lwzxn05ps6b4zy1f5xb0yg6z688wbw1f6a7";
} { };
hspec-wai = hsuper.callHackageDirect
{
pkg = "hspec-wai";
ver = "0.11.0";
sha256 = "1kqbk2by70smhd9p1zff6ilimvvxc54dkh2l0wpn03zqvydjnwl2";
} { };
patch = lib.doJailbreak (hsuper.callHackageDirect
{
pkg = "patch";
ver = "0.0.3.2";
sha256 = "10alg64zwx72lz42z9i5hfwdpk0r79zfli57l41akyznj4pwrvgh";
} { }
);
reflex = lib.dontCheck (lib.doJailbreak hsuper.reflex);
reflex-dom-core = lib.dontCheck hsuper.reflex-dom-core;
chronos = lib.doJailbreak hsuper.chronos;
hedgehog = lib.doJailbreak hsuper.hedgehog;
}

View File

@ -1,4 +1,40 @@
{
"brittany": {
"branch": "c59655f10d5ad295c2481537fc8abf0a297d9d1c",
"description": "haskell source code formatter",
"homepage": "",
"owner": "bubba",
"repo": "brittany",
"rev": "c59655f10d5ad295c2481537fc8abf0a297d9d1c",
"sha256": "1rkk09f8750qykrmkqfqbh44dbx1p8aq1caznxxlw8zqfvx39cxl",
"type": "tarball",
"url": "https://github.com/bubba/brittany/archive/c59655f10d5ad295c2481537fc8abf0a297d9d1c.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"ghcide": {
"branch": "9b8aaf9b06846571cc0b5d46680e686e4f9153a3",
"description": "A library for building Haskell IDE tooling",
"homepage": "",
"owner": "haskell",
"repo": "ghcide",
"rev": "9b8aaf9b06846571cc0b5d46680e686e4f9153a3",
"sha256": "0clwg8fgnsgwzl6rbni7p6xifl117f6h5hjsdyy0swnbjkxkqpaa",
"type": "tarball",
"url": "https://github.com/haskell/ghcide/archive/9b8aaf9b06846571cc0b5d46680e686e4f9153a3.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"haskell-language-server": {
"branch": "master",
"description": "Integration point for ghcide and haskell-ide-engine. One IDE to rule them all.",
"homepage": "",
"owner": "haskell",
"repo": "haskell-language-server",
"rev": "b649b15b2d67a97d6a262eb65fee0002629b6dcb",
"sha256": "1gxwkn3mqv20f061f9pg1y13k4ymsq6ji9gf475wdiikiql82z6a",
"type": "tarball",
"url": "https://github.com/haskell/haskell-language-server/archive/b649b15b2d67a97d6a262eb65fee0002629b6dcb.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"hspec-webdriver-clone": {
"branch": "master",
"description": "Clone of hspec-webdriver, as the original source is inaccesible",
@ -59,18 +95,6 @@
"url": "https://github.com/reflex-frp/reflex-platform/archive/8d421e9e06b0477cbc065346aaf596c9db6cc387.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"servant-reflex": {
"branch": "master",
"description": "Generate reflex client functions for querying a servant API",
"homepage": null,
"owner": "imalsogreg",
"repo": "servant-reflex",
"rev": "1109043c8437a375fc00bb48792e8dc377a84494",
"sha256": "0issnp95rnji3v9qifr0brypxsvmjkzanfq5lscj68lynnjv37g0",
"type": "tarball",
"url": "https://github.com/imalsogreg/servant-reflex/archive/1109043c8437a375fc00bb48792e8dc377a84494.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"static-haskell-nix": {
"branch": "master",
"description": "easily build most Haskell programs into fully static Linux executables",

View File

@ -30,8 +30,7 @@ type StatusEndpoint c = c :> "status" :> Get '[JSON] CurrentDeploymentStatus
type RestoreEndpoint c =
c :> "restore" :> Patch '[JSON] CommandResponse
type PingEndpoint =
"ping" :> GetNoContent '[PlainText] NoContent
type PingEndpoint = "ping" :> GetNoContent
type ProjectNameEndpoint =
"project_name" :> Get '[JSON] ProjectName

View File

@ -32,6 +32,7 @@ executable frontend
, Page.Deployments
, Page.Popup.EditDeployment
, Page.Popup.NewDeployment
, Servant.Reflex.Extra
ghc-options: -Wall
-Werror
-Wno-missing-home-modules
@ -57,6 +58,10 @@ executable frontend
, RankNTypes
, RecordWildCards
, RecursiveDo
, FlexibleInstances
, MultiParamTypeClasses
, TypeFamilies
, UndecidableInstances
-- other-extensions:
build-depends: aeson
, base >=4.12 && <4.13

View File

@ -21,6 +21,7 @@ import GHC.TypeLits
import Reflex.Dom as R
import Servant.API as S
import Servant.Reflex as SR
import Servant.Reflex.Extra ()
import Common.Types
import Frontend.GHCJS

View File

@ -0,0 +1,17 @@
{-# OPTIONS_GHC -Wno-orphans #-}
module Servant.Reflex.Extra () where
import qualified Data.Text.Encoding as E
import Servant.Reflex
import Servant.API
import Reflex.Dom
import Data.Proxy
import Data.Functor.Identity
instance (SupportsServantReflex t m)
=> HasClient t m (NoContentVerb 'GET) tag where
type Client t m (NoContentVerb 'GET) tag = Event t tag -> m (Event t (ReqResult tag NoContent))
clientWithRouteAndResultHandler Proxy _ _ req baseurl opts wrap' trigs =
wrap' =<< fmap runIdentity <$> performRequestsNoBody method (constDyn $ Identity req) baseurl opts trigs
where method = E.decodeUtf8 $ reflectMethod (Proxy :: Proxy 'GET)

1
shell.nix Normal file
View File

@ -0,0 +1 @@
(import ./default.nix { hls = true; }).shells.ghc

View File

@ -7,8 +7,12 @@ packages:
- octopod-common
extra-deps:
- deriving-aeson-0.2.2
- deriving-aeson-0.2.3
- servant-websockets-2.0.0
- postgresql-error-codes-1.0.1
- table-layout-0.9.0.1
- data-default-instances-base-0.1.0.1
- servant-0.18.2
- servant-client-0.18.2
- servant-client-core-0.18.2
- servant-server-0.18.2