| Age | Commit message (Collapse) | Author |
|
|
|
Assuming DebianLike for all these properties until I hear otherwise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Moved to its own module to keep everything related in one place.
|
|
A few parts using ensureProperty need more work to compile
|
|
|
|
|
|
Somewhat poorly; I don't like needing to export the Property constructor to
use it here, and there's a use of undefined where it should be able to use
sing.
I got quite stuck on this, so am happy to have anything that works.
|
|
|
|
|
|
|
|
|
|
While it was ok to have RevertableProperty HasInfo even when
the undo property did not have any info, and it would be ok to have
RevertableProperty Debian even when the undo property targeted a wider
set of OS's, type-level resource conflict detection needs to keep
the two straight, as in RevertableProperty (Port 80 + Debian) Debian
Without that, reverting a web server property and also including another
property that uses port 80 would fail to compile, since the type system
would not know if reverting RevertableProperty (Port 80 + Debian) continued
using the resource or not.
The downside is the need to write RevertableProperty Debian Debian
... Perhaps I'll add a type alias to avoid that or something.
|
|
|
|
|
|
This can come back later as a full Resource data type.
For now, I want to focus on merging what I have working.
|
|
|
|
|
|
|
|
|
|
|
|
This seems to not overlap with the + function and is nicer to read and
write
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
time, though retrying succeeded.
May have only been a problem on debian stable, the /var/lib/tor/keys/ was
not created by installing the package.
|
|
|
|
Converted to singletons. Type level functions not updated yet.
|
|
|
|
|
|
Separate data type to guarantee that ensureProperty is passed the actual
outer target, and not some other Targeting value from eg, unixLike.
|
|
To get outertarget from the Propellor monad, the monad would have to be
parameteriszed with an outertarget type, since there's no single type.
For example:
newtype Propellor target p = Propellor { runWithHost :: RWST target () () IO p }
deriving (Monad, Applicative, Functor)
But then mkProperty becomes a problem, since the Propellor action
passed to it needs to already be of UnixLike type:
mkProperty :: Propellor UnixLike () -> Property UnixLike
mkProperty a = Property unixLike a
Could maybe live with that, but then `target` type check fails:
Expected type: Propellor (Targeting combinedtarget) ()
Actual type: Propellor (Targeting oldtarget) ()
Problem being that it's reusing the `a` which is a Propellor target ()
target newtarget (Property oldtarget a) = Property (intersectTarget oldtarget newtarget) a
And, the new Property has a different target, so it can't use the old `a`.
So, I'd need a way to cast one Propellor target () to a different target.
Maybe:
target newtarget (Property oldtarget (Propellor a)) =
let combinedtarget = intersectTarget oldtarget newtarget
in Property combinedtarget (Propellor (unsafeCoerce a))
But is that safe??
Even if it is, I can't see how to make ensureProperty get the outertarget
type. It returns Propellor (Targeting outertarget) (), which can read
the target from the RWST monad, but how to use that where the type of the
function is defined?
Rather than all that complication, it doesn't seem too bad to
require outertarget be passed to ensureProperty.
|
|
|
|
|
|
|
|
|