From 199d10fe18d69f7eac1b2acbc0133d35c42ff2b8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 16 Mar 2016 14:12:41 -0400 Subject: wip --- src/Propellor/Types/Target.hs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/Propellor/Types/Target.hs') diff --git a/src/Propellor/Types/Target.hs b/src/Propellor/Types/Target.hs index 9e78a03a..228aae70 100644 --- a/src/Propellor/Types/Target.hs +++ b/src/Propellor/Types/Target.hs @@ -33,6 +33,22 @@ target => Targeting newtarget -> Property (Targeting oldtarget) -> Property (Targeting newtarget') target newtarget (Property oldtarget a) = Property (intersectTarget oldtarget newtarget) a +-- | Makes a property that uses either of the two input properties, +-- depending on the targeted OS. +-- +-- If both input properties support the targeted OS, then the first will be +-- used. +orProperty + :: Property (Targeting a) + -> Property (Targeting b) + -> Property (Targeting (UnionTarget a b)) +orProperty a@(Property ta ioa) b@(Property tb iob) = + Property (unionTarget ta tb) io + where + -- TODO pick with of ioa or iob to use based on final OS of + -- system being run on. + io = undefined + ----- DEMO ---------- -- Intentionally a type error! :) --foo :: Property (Targeting '[OSDebian, OSFreeBSD]) @@ -40,6 +56,13 @@ target newtarget (Property oldtarget a) = Property (intersectTarget oldtarget ne -- ensureProperty supportedos jail -- where supportedos = includeTarget debian freeBSD +--bar :: Property (Targeting '[OSDebian, OSFreeBSD]) +bar = aptinstall `orProperty` jail + +aptinstall :: Property DebianOnly +aptinstall = target debian $ mkProperty $ do + return () + jail :: Property FreeBSDOnly jail = target freeBSD $ mkProperty $ do return () -- cgit v1.2.3