packages feed

units-2.1: Tests/Compile/TH.hs

{-# LANGUAGE TemplateHaskell, DataKinds, TypeFamilies #-}

module Tests.Compile.TH where

import Data.Metrology.TH
import Data.Metrology.Poly
import qualified Data.Metrology as Mono

$(declareDimension "Length")
$(declareCanonicalUnit "Meter" ''Length (Just "m"))
$(declareDerivedUnit "Foot" ''Meter 0.3048 Nothing)

type MyLCSU = MkLCSU '[(Length, Meter)]

len1 :: MkQu_DLN Length MyLCSU Double
len1 = 5 % Meter

len2 :: MkQu_DLN Length MyLCSU Double
len2 = 10 % Foot

$(declareMonoUnit "Second" (Just "s"))
type Time = MkQu_D Second

time :: Time
time = 10 Mono.% Second