packages feed

typecheck-plugin-nat-simple-0.1.0.2: test/tryLog.hs

{-# LANGUAGE BlockArguments, OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

import Outputable
import Control.Monad.Try hiding (Message)
import Data.String
import Data.Log

main :: IO ()
main = do
	let	(r, l) = runTry do
			n <- 8 `devide` 3 :: Try (Log String Int) (Log String Int) Int
			(15 `devide` 0) `catch` \e -> tell e >> pure (n + 0)
	putStr $ message l
--	putStrLn . showSDocUnsafe $ ppr l
	print r

devide :: forall s . (IsString s, Message s) => Int -> Int -> Try (Log s Int) (Log s Int) Int
m `devide` 0 = throw $ logVar m .+. " is devided by " .+. logVar 0
m `devide` n = do
	tell (logVar m .+. " is devided by " .+. logVar n :: Log s Int)
	pure $ m `div` n