Initial commit
This commit is contained in:
parent
8f3ebb139e
commit
0579b6d3e1
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
dist/
|
5
ChangeLog.md
Normal file
5
ChangeLog.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Revision history for ebook-manager
|
||||
|
||||
## 0.1.0.0 -- YYYY-mm-dd
|
||||
|
||||
* First version. Released on an unsuspecting world.
|
30
LICENSE
Normal file
30
LICENSE
Normal file
@ -0,0 +1,30 @@
|
||||
Copyright (c) 2018, Mats Rauhala
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
|
||||
* Neither the name of Mats Rauhala nor the names of other
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
10
default.nix
Normal file
10
default.nix
Normal file
@ -0,0 +1,10 @@
|
||||
{ mkDerivation, base, stdenv }:
|
||||
mkDerivation {
|
||||
pname = "ebook-manager";
|
||||
version = "0.1.0.0";
|
||||
src = ./.;
|
||||
isLibrary = false;
|
||||
isExecutable = true;
|
||||
executableHaskellDepends = [ base ];
|
||||
license = stdenv.lib.licenses.bsd3;
|
||||
}
|
45
ebook-manager.cabal
Normal file
45
ebook-manager.cabal
Normal file
@ -0,0 +1,45 @@
|
||||
-- Initial ebook-manager.cabal generated by cabal init. For further
|
||||
-- documentation, see http://haskell.org/cabal/users-guide/
|
||||
|
||||
name: ebook-manager
|
||||
version: 0.1.0.0
|
||||
-- synopsis:
|
||||
-- description:
|
||||
license: BSD3
|
||||
license-file: LICENSE
|
||||
author: Mats Rauhala
|
||||
maintainer: mats.rauhala@iki.fi
|
||||
-- copyright:
|
||||
category: Web
|
||||
build-type: Simple
|
||||
extra-source-files: ChangeLog.md
|
||||
cabal-version: >=1.10
|
||||
|
||||
executable ebook-manager
|
||||
main-is: Main.hs
|
||||
other-modules: Devel.Main
|
||||
-- other-extensions:
|
||||
build-depends: base >=4.10 && <4.11
|
||||
, servant
|
||||
, servant-server
|
||||
, servant-docs
|
||||
, classy-prelude
|
||||
, cryptonite
|
||||
, x509
|
||||
, x509-store
|
||||
, asn1-data
|
||||
, asn1-types
|
||||
, pem
|
||||
, mtl
|
||||
, transformers
|
||||
, bytestring
|
||||
, text
|
||||
, pandoc
|
||||
, foreign-store
|
||||
, warp
|
||||
, wai
|
||||
, dhall
|
||||
, lucid
|
||||
, servant-lucid
|
||||
hs-source-dirs: src
|
||||
default-language: Haskell2010
|
7
nixpkgs-version.json
Normal file
7
nixpkgs-version.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"url": "https://github.com/nixos/nixpkgs.git",
|
||||
"rev": "83a5765b1fea2472ec9cf9d179d3efd18b45c77e",
|
||||
"date": "2018-01-08T11:52:28+01:00",
|
||||
"sha256": "01rb61dkbzjbwnb3p8lgs03a94f4584199dlr0cwdmqzaxnp506h",
|
||||
"fetchSubmodules": true
|
||||
}
|
32
shell.nix
Normal file
32
shell.nix
Normal file
@ -0,0 +1,32 @@
|
||||
{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:
|
||||
|
||||
let
|
||||
|
||||
pinnedVersion = nixpkgs.lib.importJSON ./nixpkgs-version.json;
|
||||
pinnedPkgs = import (nixpkgs.fetchFromGitHub {
|
||||
owner = "NixOS";
|
||||
repo = "nixpkgs";
|
||||
inherit (pinnedVersion) rev sha256;
|
||||
}) {};
|
||||
emailparse = nixpkgs.fetchFromGitHub {
|
||||
owner = "mkawalec";
|
||||
repo = "emailparse";
|
||||
rev = "c5533707c7339bcebd616e1f7cdb442ca2d16626";
|
||||
sha256 = "036a6yx6lqjz2prj85vi1qxcy9ph4mnr0dq1djj3j7y1rqhmgyiq";
|
||||
};
|
||||
inherit (pinnedPkgs) pkgs;
|
||||
|
||||
|
||||
haskellPackages = if compiler == "default"
|
||||
then pkgs.haskellPackages
|
||||
else pkgs.haskell.packages.${compiler};
|
||||
|
||||
f = haskellPackages.callCabal2nix "ebook-manager" ./.;
|
||||
|
||||
variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
|
||||
|
||||
drv = variant (haskellPackages.callPackage f {});
|
||||
|
||||
in
|
||||
|
||||
if pkgs.lib.inNixShell then drv.env else drv
|
34
src/Devel/Main.hs
Normal file
34
src/Devel/Main.hs
Normal file
@ -0,0 +1,34 @@
|
||||
module Devel.Main where
|
||||
|
||||
import Main (defaultMain)
|
||||
import Control.Concurrent
|
||||
import Control.Monad (void)
|
||||
import Data.IORef (IORef, newIORef, readIORef, writeIORef)
|
||||
import Foreign.Store (Store(..), lookupStore, readStore, storeAction, withStore)
|
||||
import GHC.Word (Word32)
|
||||
|
||||
update :: IO ()
|
||||
update = do
|
||||
lookupStore tidStoreNum >>= maybe setupNew restart
|
||||
where
|
||||
doneStore :: Store (MVar ())
|
||||
doneStore = Store 0
|
||||
setupNew :: IO ()
|
||||
setupNew = do
|
||||
done <- storeAction doneStore newEmptyMVar
|
||||
tid <- start done
|
||||
void $ storeAction (Store tidStoreNum) (newIORef tid)
|
||||
restart tidStore = modifyStoredIORef tidStore $ \tid -> do
|
||||
killThread tid
|
||||
withStore doneStore takeMVar
|
||||
readStore doneStore >>= start
|
||||
start :: MVar () -> IO ThreadId
|
||||
start done = forkFinally defaultMain (\_ -> putMVar done ())
|
||||
|
||||
modifyStoredIORef :: Store (IORef a) -> (a -> IO a) -> IO ()
|
||||
modifyStoredIORef store f = withStore store $ \ref -> do
|
||||
v <- readIORef ref
|
||||
f v >>= writeIORef ref
|
||||
|
||||
tidStoreNum :: Word32
|
||||
tidStoreNum = 1
|
7
src/Main.hs
Normal file
7
src/Main.hs
Normal file
@ -0,0 +1,7 @@
|
||||
module Main where
|
||||
|
||||
defaultMain :: IO ()
|
||||
defaultMain = putStrLn "Hello haskell"
|
||||
|
||||
main :: IO ()
|
||||
main = defaultMain
|
Loading…
Reference in New Issue
Block a user