    module Propellor.Property.Installer.Types where

    -- | The disk device to install to.
    newtype TargetDiskDevice = TargetDiskDevice FilePath
    	deriving (ReadPrec [TargetDiskDevice]
    ReadPrec TargetDiskDevice
    Int -> ReadS TargetDiskDevice
    ReadS [TargetDiskDevice]
    (Int -> ReadS TargetDiskDevice)
    -> ReadS [TargetDiskDevice]
    -> ReadPrec TargetDiskDevice
    -> ReadPrec [TargetDiskDevice]
    -> Read TargetDiskDevice
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS TargetDiskDevice
    readsPrec :: Int -> ReadS TargetDiskDevice
    $creadList :: ReadS [TargetDiskDevice]
    readList :: ReadS [TargetDiskDevice]
    $creadPrec :: ReadPrec TargetDiskDevice
    readPrec :: ReadPrec TargetDiskDevice
    $creadListPrec :: ReadPrec [TargetDiskDevice]
    readListPrec :: ReadPrec [TargetDiskDevice]
    Read, Int -> TargetDiskDevice -> ShowS
    [TargetDiskDevice] -> ShowS
    TargetDiskDevice -> FilePath
    (Int -> TargetDiskDevice -> ShowS)
    -> (TargetDiskDevice -> FilePath)
    -> ([TargetDiskDevice] -> ShowS)
    -> Show TargetDiskDevice
    forall a.
    (Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TargetDiskDevice -> ShowS
    showsPrec :: Int -> TargetDiskDevice -> ShowS
    $cshow :: TargetDiskDevice -> FilePath
    show :: TargetDiskDevice -> FilePath
    $cshowList :: [TargetDiskDevice] -> ShowS
    showList :: [TargetDiskDevice] -> ShowS
    Show)

    data DiskEraseConfirmed = DiskEraseConfirmed
    	deriving (ReadPrec [DiskEraseConfirmed]
    ReadPrec DiskEraseConfirmed
    Int -> ReadS DiskEraseConfirmed
    ReadS [DiskEraseConfirmed]
    (Int -> ReadS DiskEraseConfirmed)
    -> ReadS [DiskEraseConfirmed]
    -> ReadPrec DiskEraseConfirmed
    -> ReadPrec [DiskEraseConfirmed]
    -> Read DiskEraseConfirmed
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS DiskEraseConfirmed
    readsPrec :: Int -> ReadS DiskEraseConfirmed
    $creadList :: ReadS [DiskEraseConfirmed]
    readList :: ReadS [DiskEraseConfirmed]
    $creadPrec :: ReadPrec DiskEraseConfirmed
    readPrec :: ReadPrec DiskEraseConfirmed
    $creadListPrec :: ReadPrec [DiskEraseConfirmed]
    readListPrec :: ReadPrec [DiskEraseConfirmed]
    Read, Int -> DiskEraseConfirmed -> ShowS
    [DiskEraseConfirmed] -> ShowS
    DiskEraseConfirmed -> FilePath
    (Int -> DiskEraseConfirmed -> ShowS)
    -> (DiskEraseConfirmed -> FilePath)
    -> ([DiskEraseConfirmed] -> ShowS)
    -> Show DiskEraseConfirmed
    forall a.
    (Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DiskEraseConfirmed -> ShowS
    showsPrec :: Int -> DiskEraseConfirmed -> ShowS
    $cshow :: DiskEraseConfirmed -> FilePath
    show :: DiskEraseConfirmed -> FilePath
    $cshowList :: [DiskEraseConfirmed] -> ShowS
    showList :: [DiskEraseConfirmed] -> ShowS
    Show)

    -- | Class of user input that an installer might prompt for.
    class UserInput i where
    	-- | Get the disk device the user selected to install to.
    	targetDiskDevice :: i -> Maybe TargetDiskDevice
    	-- | Check if the user has confirmed they want to erase the target
    	-- disk device.
    	diskEraseConfirmed :: i -> Maybe DiskEraseConfirmed