packages feed

registry-0.3.0.0: 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