packages feed

path-0.7.1: test/TH.hs

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}

module TH where

import qualified Language.Haskell.TH.Syntax as TH
import Path
import Path.Internal



class Foo a b where
    foo :: Path a b -> FilePath
    foo = toFilePath

instance Foo Abs Dir
instance Foo Abs File
instance Foo Rel Dir
instance Foo Rel File



qqAbsDir :: FilePath
qqAbsDir = foo [absdir|/foo/|]

qqAbsFile :: FilePath
qqAbsFile = foo [absfile|/foo|]

qqRelDir :: FilePath
qqRelDir = foo [reldir|foo/|]

qqRelFile :: FilePath
qqRelFile = foo [relfile|foo|]

thAbsDir :: FilePath
thAbsDir = foo $(mkAbsDir "/foo/")

thAbsFile :: FilePath
thAbsFile = foo $(mkAbsFile "/foo")

thRelDir :: FilePath
thRelDir = foo $(mkRelDir "foo/")

thRelFile :: FilePath
thRelFile = foo $(mkRelFile "foo")

liftAbsDir :: FilePath
liftAbsDir = foo $(TH.lift (Path "/foo/" :: Path Abs Dir))

liftAbsFile :: FilePath
liftAbsFile = foo $(TH.lift (Path "/foo" :: Path Abs File))

liftRelDir :: FilePath
liftRelDir = foo $(TH.lift (Path "foo/" :: Path Rel Dir))

liftRelFile :: FilePath
liftRelFile = foo $(TH.lift (Path "foo" :: Path Rel File))