Haskell 玩箭头(->;)
以下是上下文:Haskell 玩箭头(->;),haskell,Haskell,以下是上下文: data MonitoringCommand = ListCommandReceived | ListCommandResponseReceived | ListEventsGenerated | ListValidationStateHistory runMonitoringCommand :: forall stepType. Moni
data MonitoringCommand = ListCommandReceived
| ListCommandResponseReceived
| ListEventsGenerated
| ListValidationStateHistory
runMonitoringCommand :: forall stepType. MonitoringCommand ->
Step stepType ->
ClientSetting ->
Workspace ->
Byline IO (Either StepError (Step stepType))
runMonitoringCommand monitoringCommand currentStep settings Workspace {workspaceId} =
displayCallResult currentStep (case monitoringCommand of
ListCommandReceived -> "Commands" (streamGsdCommandByWorkspaceId settings workspaceId)
ListCommandResponseReceived -> "Command Responses" (streamGsdCommandResponseByWorkspaceId settings workspaceId)
ListEventsGenerated -> "Events" (streamGsdEventByWorkspaceId settings workspaceId)
ListValidationStateHistory -> "Validation State History" (streamGsdValidationStateByWorkspaceId settings workspaceId))
displayCallResult :: forall item stepType. Show item =>
Step stepType ->
String ->
SerialT IO (SafeResponse (Persisted item)) ->
Byline IO (Either StepError (Step stepType))
displayCallResult currentStep itemName clientCall = do
displayBeginningOfACommand
sayLn $ fg white <> (text . pack) itemName
safeResponse <- liftIO $ StreamlySafe.toList $ clientCall
nextStep <- case safeResponse of
Left error -> return $ Left $ StepError { currentStep, errorDescription = show error }
Right persistedItems -> persistedItems & mapM (sayLn . displayItem) >> (return $ Right currentStep)
displayEndOfACommand
return nextStep
where
displayItem :: Show item => (Persisted item) -> Stylized
displayItem PersistedItem {offset, item} =
fg white <> " "<>(text.pack.show) offset <> "- " <> fg green <> (text.pack.show) item
你可以用
runMonitoringCommand :: forall stepType. MonitoringCommand ->
Step stepType ->
ClientSetting ->
Workspace ->
Byline IO (Either StepError (Step stepType))
runMonitoringCommand monitoringCommand currentStep settings Workspace {workspaceId} =
(case monitoringCommand of
ListCommandReceived -> displayCallResult currentStep "Commands" (streamGsdCommandByWorkspaceId settings workspaceId)
ListCommandResponseReceived -> displayCallResult currentStep "Command Responses" (streamGsdCommandResponseByWorkspaceId settings workspaceId)
ListEventsGenerated -> displayCallResult currentStep "Events" (streamGsdEventByWorkspaceId settings workspaceId)
ListValidationStateHistory -> displayCallResult currentStep "Validation State History" (streamGsdValidationStateByWorkspaceId settings workspaceId))
runMonitoringCommand monitoringCommand currentStep settings Workspace {workspaceId} =
uncurry (displayCallResult currentStep) $ case monitoringCommand of
ListCommandReceived -> ("Commands", streamGsdCommandByWorkspaceId settings workspaceId)
ListCommandResponseReceived -> ("Command Responses", streamGsdCommandResponseByWorkspaceId settings workspaceId)
ListEventsGenerated -> ("Events", streamGsdEventByWorkspaceId settings workspaceId)
ListValidationStateHistory -> ("Validation State History", streamGsdValidationStateByWorkspaceId settings workspaceId)