From 7d3df6adce65e8840ef651a8a02a34a1a02083aa Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sun, 24 Jan 2016 07:04:53 +0000 Subject: Revert "Broken existentially quantified printer config" This reverts commit 6434397a3d103547b563ada27fd64c38cb05e1f0. --- server/src/Thermoprint/Server/Printer.hs | 39 +++++--------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) (limited to 'server/src/Thermoprint/Server/Printer.hs') diff --git a/server/src/Thermoprint/Server/Printer.hs b/server/src/Thermoprint/Server/Printer.hs index cd12297..f34b2fa 100644 --- a/server/src/Thermoprint/Server/Printer.hs +++ b/server/src/Thermoprint/Server/Printer.hs @@ -1,18 +1,14 @@ {-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ImpredicativeTypes #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE ExistentialQuantification #-} -{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} module Thermoprint.Server.Printer ( Printer(..), printer - , IsPrinter(..), PrinterSpec(..) , Queue(..) , runPrinter ) where @@ -45,23 +41,8 @@ import Control.Monad (forever) import Control.Concurrent.STM -import Data.Default.Class - -import Prelude hiding (print) - -class IsPrinter a where - toMethod :: forall m. (MonadResource m) => a -> (forall m1. (MonadResource m1) => m (Printout -> m1 (Maybe PrintingError))) - -instance (MonadResource m) => IsPrinter (Printer m) where - toMethod Printer{..} = return print - -instance (MonadResource m) => IsPrinter (PrinterSpec m) where - toMethod (PS p) = toMethod p - -data PrinterSpec m = forall p. IsPrinter p => PS p - -data Printer m = Printer - { print :: Printout -> m (Maybe PrintingError) +data Printer = Printer + { print :: forall m. (MonadIO m) => Printout -> m (Maybe PrintingError) , queue :: TVar Queue } @@ -73,25 +54,17 @@ data Queue = Queue } deriving (Typeable, Generic, NFData) -instance Default Queue where - def = Queue - { pending = Seq.empty - , current = Nothing - , history = Seq.empty - } - -printer :: (MonadResource m, MonadResource m1, IsPrinter p) => p -> m (Printer m1) --- ^ Version of 'Printer' handling the initialisation of the 'TVar' -printer p = Printer <$> toMethod p <*> liftIO (newTVarIO def) +printer :: (MonadIO m) => (forall m. (MonadIO m) => Printout -> m (Maybe PrintingError)) -> m Printer +printer f = Printer f <$> liftIO (newTVarIO $ Queue Seq.empty Nothing Seq.empty) atomically' :: MonadIO m => STM a -> m a atomically' = liftIO . atomically runPrinter :: ( MonadReader ConnectionPool m + , MonadIO m , MonadLogger m - , MonadResource m , MonadBaseControl IO m - ) => Printer m -> m () + ) => Printer -> m () -- ^ Loop 'forever' pushing entries from the 'Queue' associated to a 'Printer' into its 'print'-method runPrinter Printer{..} = forever $ do jobId <- atomically' $ do -- cgit v1.2.3