aboutsummaryrefslogtreecommitdiff
path: root/server/src/Thermoprint/Server/Printer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/Thermoprint/Server/Printer.hs')
-rw-r--r--server/src/Thermoprint/Server/Printer.hs20
1 files changed, 4 insertions, 16 deletions
diff --git a/server/src/Thermoprint/Server/Printer.hs b/server/src/Thermoprint/Server/Printer.hs
index 46b8a53..5b1b7b0 100644
--- a/server/src/Thermoprint/Server/Printer.hs
+++ b/server/src/Thermoprint/Server/Printer.hs
@@ -1,7 +1,4 @@
1{-# LANGUAGE RankNTypes #-} 1{-# LANGUAGE RankNTypes #-}
2{-# LANGUAGE TypeSynonymInstances #-}
3{-# LANGUAGE MultiParamTypeClasses #-}
4{-# LANGUAGE FlexibleInstances #-}
5{-# LANGUAGE FlexibleContexts #-} 2{-# LANGUAGE FlexibleContexts #-}
6{-# LANGUAGE RecordWildCards #-} 3{-# LANGUAGE RecordWildCards #-}
7{-# LANGUAGE OverloadedStrings #-} 4{-# LANGUAGE OverloadedStrings #-}
@@ -12,7 +9,8 @@
12{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} 9{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
13 10
14module Thermoprint.Server.Printer 11module Thermoprint.Server.Printer
15 ( PrinterMethod(..), PrinterSpec(..), IsPrinter(..), Printer(..), printer 12 ( PrinterMethod(..), Printer(..)
13 , printer
16 , Queue(..) 14 , Queue(..)
17 , runPrinter 15 , runPrinter
18 , addToQueue 16 , addToQueue
@@ -48,16 +46,6 @@ import Control.Monad (forever)
48import Control.Concurrent.STM 46import Control.Concurrent.STM
49 47
50newtype PrinterMethod = PM { unPM :: forall m. (MonadResource m, MonadLogger m) => Printout -> m (Maybe PrintingError) } 48newtype PrinterMethod = PM { unPM :: forall m. (MonadResource m, MonadLogger m) => Printout -> m (Maybe PrintingError) }
51data PrinterSpec m = forall p. IsPrinter p m => PS p
52
53class IsPrinter p m where
54 printMethod :: p -> m PrinterMethod
55
56instance Applicative m => IsPrinter PrinterMethod m where
57 printMethod = pure
58
59instance IsPrinter (PrinterSpec m) m where
60 printMethod (PS p) = printMethod p
61 49
62data Printer = Printer 50data Printer = Printer
63 { print :: PrinterMethod 51 { print :: PrinterMethod
@@ -79,8 +67,8 @@ instance Default Queue where
79 , history = Seq.empty 67 , history = Seq.empty
80 } 68 }
81 69
82printer :: (MonadResource m, IsPrinter p m) => p -> m Printer 70printer :: MonadResource m => m PrinterMethod -> m Printer
83printer spec = Printer <$> printMethod spec <*> liftIO (newTVarIO def) 71printer p = Printer <$> p <*> liftIO (newTVarIO def)
84 72
85atomically' :: MonadIO m => STM a -> m a 73atomically' :: MonadIO m => STM a -> m a
86atomically' = liftIO . atomically 74atomically' = liftIO . atomically