packages feed

registry-0.1.6.3: test/Test/Tutorial/Exercise7.hs

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}

module Test.Tutorial.Exercise7 where

import           Data.Registry
import           Protolude
import           Test.Tutorial.Application
import           Test.Tutorial.Exercise6

newInitializedLogger :: IO (Logger IO)
newInitializedLogger = do
  print ("start the logger" :: Text)
  pure (Logger putStrLn putStrLn)

newInitializedRegistry :: Registry _ _
newInitializedRegistry = fun newInitializedLogger +: registryIO

newInitializedAppIO :: IO App
newInitializedAppIO = make @(IO App) newInitializedRegistry

memoizedRegistry :: IO (Registry _ _)
memoizedRegistry = memoize @IO @(Logger IO) newInitializedRegistry

newInitializedMemoizedAppIO :: IO App
newInitializedMemoizedAppIO =  make @(IO App) =<< memoizedRegistry

memoizedAllRegistry :: IO (Registry _ _)
memoizedAllRegistry = memoizeAll @IO newInitializedRegistry

newInitializedMemoizedAllAppIO :: IO App
newInitializedMemoizedAllAppIO =  make @(IO App) =<< memoizedAllRegistry