{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE OverloadedStrings #-} -- Proof of concept application, defines a custom @Consumer@. ZMQ client -- listens for incoming messages from @dummy-pulser@. module Main ( main ) where import Control.Monad (forever) import Data.Aeson (FromJSON) import Data.Function ((&)) import Data.Text (Text, pack) import Data.Void (Void) import Effectful (IOE, runEff) import Effectful.Log (Log, localDomain, logInfo_, runLog) import Effectful.Reader.Static (Reader, runReader) import Effectful.Resource (Resource, runResource) import GHC.Generics (Generic) import Hsm.Core.App (launch) import Hsm.Core.Pipes (Consumer, await, runEffect, (>->)) import Hsm.Core.Zmq (client) data Env = Env { name :: Text , subEps :: [Text] , topics :: [Text] } deriving (FromJSON, Generic) type Effs = [Log, Reader Env, Resource, IOE] type Receiver = Consumer Int Env Void Effs receiver :: Receiver () receiver = localDomain "receiver" $ forever $ await >>= logInfo_ . mappend "Received pulse #" . pack . show main :: IO () main = launch "dummy-receiver" $ \logger level e -> (client >-> receiver) & runEffect & runLog e.name logger level & runReader e & runResource & runEff