Provide more building blocks and extend example
This commit is contained in:
		@@ -2,6 +2,8 @@
 | 
			
		||||
module ComputationM
 | 
			
		||||
  ( ComputationM
 | 
			
		||||
  , Token
 | 
			
		||||
  , tupleTokens
 | 
			
		||||
  , zipTokens
 | 
			
		||||
  , evalComputationM
 | 
			
		||||
  , inject
 | 
			
		||||
  , mapComputationM
 | 
			
		||||
@@ -30,10 +32,17 @@ deriving instance (Show a, Show b) => Show (TypedRun a b)
 | 
			
		||||
data Token a where
 | 
			
		||||
  Token :: Int -> Token a
 | 
			
		||||
  TupleToken :: Token a -> Token b -> Token (a, b)
 | 
			
		||||
  ZipToken :: Token [a] -> Token [b] -> Token [(a, b)]
 | 
			
		||||
  NoToken :: Token ()
 | 
			
		||||
 | 
			
		||||
deriving instance Show (Token a)
 | 
			
		||||
 | 
			
		||||
tupleTokens :: (Show a, Show b) => Token a -> Token b -> Token (a, b)
 | 
			
		||||
tupleTokens = TupleToken
 | 
			
		||||
 | 
			
		||||
zipTokens :: (Show a, Show b) => Token [a] -> Token [b] -> Token [(a, b)]
 | 
			
		||||
zipTokens = ZipToken
 | 
			
		||||
 | 
			
		||||
data Dependency a b = Dependency (Token a) (TypedRun a b) (Token b)
 | 
			
		||||
  deriving (Show)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@ module Functions
 | 
			
		||||
  ( isImageFilename
 | 
			
		||||
  , convertedImageFilename
 | 
			
		||||
  , listDirectory
 | 
			
		||||
  , openImage
 | 
			
		||||
  , convertImage
 | 
			
		||||
  , saveFile
 | 
			
		||||
  , runPandoc
 | 
			
		||||
@@ -17,7 +16,6 @@ isImageFilename = runFunction IsImageFilename
 | 
			
		||||
convertedImageFilename = runFunction ConvertedImageFilename
 | 
			
		||||
 | 
			
		||||
listDirectory = runFunctionIO ListDirectory
 | 
			
		||||
openImage = runFunctionIO OpenImage
 | 
			
		||||
convertImage = runFunctionIO ConvertImage
 | 
			
		||||
saveFile = runFunctionIO SaveFile
 | 
			
		||||
runPandoc = runFunctionIO RunPandoc
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
module Main where
 | 
			
		||||
 | 
			
		||||
import Types
 | 
			
		||||
import ComputationM
 | 
			
		||||
import Functions
 | 
			
		||||
 | 
			
		||||
@@ -7,16 +8,16 @@ handleRecipeDir :: Token FilePath -> ComputationM ()
 | 
			
		||||
handleRecipeDir dir = do
 | 
			
		||||
  dirContents <- listDirectory dir
 | 
			
		||||
  imageFilenames <- filterComputationM isImageFilename dirContents
 | 
			
		||||
  t <- inject ("hej", "hey.txt")
 | 
			
		||||
  saveFile t
 | 
			
		||||
  convertedImageFilenames <- mapComputationM convertedImageFilename imageFilenames
 | 
			
		||||
  flip mapComputationM_ (zipTokens imageFilenames convertedImageFilenames) $ \files -> do
 | 
			
		||||
    settings <- inject $ ResizeToWidth 800
 | 
			
		||||
    convertImage $ tupleTokens files settings
 | 
			
		||||
 | 
			
		||||
test :: ComputationM ()
 | 
			
		||||
test = do
 | 
			
		||||
  dir <- inject "retter"
 | 
			
		||||
  dirContents <- listDirectory dir
 | 
			
		||||
  mapComputationM_ handleRecipeDir dirContents
 | 
			
		||||
  t <- inject ("hej", "hey.txt")
 | 
			
		||||
  saveFile t
 | 
			
		||||
 | 
			
		||||
main :: IO ()
 | 
			
		||||
main = mapM_ print $ evalComputationM test
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
{-# OPTIONS_GHC -Wno-orphans #-}
 | 
			
		||||
module Sources where
 | 
			
		||||
 | 
			
		||||
-- TODO: Figure out if any of this is useful.
 | 
			
		||||
@@ -10,7 +11,7 @@ data Source a where
 | 
			
		||||
instance SourceState FilePath where
 | 
			
		||||
  stateOfSource = undefined
 | 
			
		||||
 | 
			
		||||
instance SourceState Image where
 | 
			
		||||
instance SourceState ((FilePath, FilePath), ImageConversionSettings) where
 | 
			
		||||
  stateOfSource = undefined
 | 
			
		||||
 | 
			
		||||
instance SourceState (String, FilePath) where
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ module Types where
 | 
			
		||||
 | 
			
		||||
import Data.ByteString (ByteString)
 | 
			
		||||
 | 
			
		||||
data Image = Image
 | 
			
		||||
data ImageConversionSettings = ResizeToWidth Int
 | 
			
		||||
  deriving (Show)
 | 
			
		||||
 | 
			
		||||
class (SourceState a, Show f) => IsFunction f a b | f -> a b where
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user