-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A Digital Ocean client in Haskell -- -- HDO is a client to Digital Ocean API. It can either be used as -- a library embedded in other tools or as a command-line client -- (docean). @package hdo @version 0.2 -- | Generate random names shamelessly stolen from -- https://raw.githubusercontent.com/docker/docker/master/pkg/namesgenerator/names-generator.go module Network.DO.Names generateName :: IO String -- | Functor and low-level mechanism to interact with a server using Wreq -- and JSON values. module Network.REST data REST a Get :: URI -> (Value -> a) -> REST a Post :: URI -> Value -> (Maybe Value -> a) -> REST a WaitFor :: Int -> String -> a -> REST a GetWith :: Options -> URI -> (Value -> a) -> REST a PostWith :: Options -> URI -> Value -> (Either String Value -> a) -> REST a DeleteWith :: Options -> URI -> a -> REST a type RESTT = FreeT REST getJSON :: (Monad m) => URI -> RESTT m Value getJSONWith :: (Monad m) => Options -> URI -> RESTT m Value postJSON :: (Monad m) => URI -> Value -> RESTT m (Maybe Value) postJSONWith :: (Monad m) => Options -> URI -> Value -> RESTT m (Either String Value) deleteJSONWith :: (Monad m) => Options -> URI -> RESTT m () waitFor :: (Monad m) => Int -> String -> RESTT m () -- | An implementation of Net functor based on wreq and -- IO runWreq :: RESTT IO r -> IO r ssh :: (MonadIO m, Exception e) => [String] -> m (Either e ()) -- | Contains Haskell representation of most data types used for -- interacting with DigitalOcean's API v2 -- -- See https://developers.digitalocean.com/documentation/v2/ module Network.DO.Types type AuthToken = String type Slug = String type URI = String newtype Error Error :: String -> Error [msg] :: Error -> String type Result a = Either Error a error :: String -> Result a data ToolConfiguration Tool :: Maybe URI -> Maybe AuthToken -> Bool -> ToolConfiguration [slackUri] :: ToolConfiguration -> Maybe URI [authToken] :: ToolConfiguration -> Maybe AuthToken [quiet] :: ToolConfiguration -> Bool -- | A type for describing Region A region can be assigned an -- empty object when it is undefined, or be referenced simply by its -- slug -- https://developers.digitalocean.com/documentation/v2/#regions data Region Region :: String -> Slug -> [SizeSlug] -> Bool -> Region [regionName] :: Region -> String [regionSlug] :: Region -> Slug [regionSizes] :: Region -> [SizeSlug] [regionAvailable] :: Region -> Bool RegionSlug :: Slug -> Region NoRegion :: Region -- | String representation of size slugs This maps to corresponding -- expected JSON string value. sizeSlugs :: [String] -- | Enumeration of all possible size slugs data SizeSlug M512 :: SizeSlug G1 :: SizeSlug G2 :: SizeSlug G4 :: SizeSlug G8 :: SizeSlug G16 :: SizeSlug G32 :: SizeSlug G48 :: SizeSlug G64 :: SizeSlug G96 :: SizeSlug type ImageSlug = String type KeyId = Int defaultImage :: ImageSlug data BoxConfiguration BoxConfiguration :: String -> Region -> SizeSlug -> ImageSlug -> [KeyId] -> Bool -> BoxConfiguration [configName] :: BoxConfiguration -> String [boxRegion] :: BoxConfiguration -> Region [size] :: BoxConfiguration -> SizeSlug [configImageSlug] :: BoxConfiguration -> ImageSlug [keys] :: BoxConfiguration -> [KeyId] [backgroundCreate] :: BoxConfiguration -> Bool type Id = Integer data Mega data Giga -- | A type for various sizes Type parameter is used to define number's -- magnitude newtype Bytes a Bytes :: Int -> Bytes a [bytesSize] :: Bytes a -> Int jsonBytes :: Int -> Parser (Bytes a) newtype Date Date :: UTCTime -> Date [theDate] :: Date -> UTCTime data Status New :: Status Active :: Status Off :: Status Archive :: Status data NetType Public :: NetType Private :: NetType -- | Type of a single Network definition -- -- This type is parameterized with a phantom type which lifts the network -- address type at the type level (could use DataKinds extension...). -- This allows distinguishing types of of networks while using same -- parsing. data Network a NetworkV4 :: IP -> IP -> IP -> NetType -> Network a [ip_address] :: Network a -> IP [netmask] :: Network a -> IP [gateway] :: Network a -> IP [netType] :: Network a -> NetType NetworkV6 :: IP -> Int -> IP -> NetType -> Network a [ip_address] :: Network a -> IP [netmask_v6] :: Network a -> Int [gateway] :: Network a -> IP [netType] :: Network a -> NetType data V4 data V6 jsonNetwork :: (FromJSON a3, FromJSON a2, FromJSON a1, FromJSON a) => (a3 -> a2 -> a1 -> a -> b) -> Object -> Parser b -- | Type of Networks configured for a Droplet -- -- A network is either a list of IPv4 and IPv6 NICs definitions, or no -- network. We need this because a droplet can contain an -- 'empty' networks JSON Object entry, instead of -- null. data Networks Networks :: [Network V4] -> [Network V6] -> Networks [v4] :: Networks -> [Network V4] [v6] :: Networks -> [Network V6] NoNetworks :: Networks -- | (Partial) Type of Droplets -- -- https://developers.digitalocean.com/documentation/v2/#droplets data Droplet Droplet :: Id -> String -> Bytes Mega -> Int -> Bytes Giga -> Bool -> Date -> Status -> [Id] -> [Id] -> Region -> SizeSlug -> Networks -> Droplet [dropletId] :: Droplet -> Id [name] :: Droplet -> String [memory] :: Droplet -> Bytes Mega [vcpus] :: Droplet -> Int [disk] :: Droplet -> Bytes Giga [locked] :: Droplet -> Bool [created_at] :: Droplet -> Date [status] :: Droplet -> Status [backup_ids] :: Droplet -> [Id] [snapshot_ids] :: Droplet -> [Id] [region] :: Droplet -> Region [size_slug] :: Droplet -> SizeSlug [networks] :: Droplet -> Networks data ImageType Snapshot :: ImageType Temporary :: ImageType Backup :: ImageType -- | Type of droplet images -- -- https://developers.digitalocean.com/documentation/v2/#images data Image Image :: Id -> String -> String -> Maybe Slug -> Bool -> [Region] -> Bytes Giga -> Date -> ImageType -> Image [imageId] :: Image -> Id [imageName] :: Image -> String [distribution] :: Image -> String [imageSlug] :: Image -> Maybe Slug [publicImage] :: Image -> Bool [imageRegions] :: Image -> [Region] [min_disk_size] :: Image -> Bytes Giga [image_created_at] :: Image -> Date [imageType] :: Image -> ImageType -- | Type of SSH Keys -- -- https://developers.digitalocean.com/documentation/v2/#ssh-keys data Key Key :: Id -> String -> String -> String -> Key [keyId] :: Key -> Id [keyFingerprint] :: Key -> String [publicKey] :: Key -> String [keyName] :: Key -> String type TransferRate = Double type Price = Double -- | Type of Size objects -- -- https://developers.digitalocean.com/documentation/v2/#sizes data Size Size :: SizeSlug -> Bytes Mega -> Int -> Bytes Giga -> TransferRate -> Price -> Price -> [Region] -> Bool -> Size [szSlug] :: Size -> SizeSlug [szMemory] :: Size -> Bytes Mega [szVcpus] :: Size -> Int [szDisk] :: Size -> Bytes Giga [szTransfer] :: Size -> TransferRate [szPrice_Monthly] :: Size -> Price [szPrice_Hourly] :: Size -> Price [szRegions] :: Size -> [Region] [szAvailable] :: Size -> Bool -- | Type of action status This is returned when action is initiated or -- when status of some action is requested data ActionResult ActionResult :: Id -> ActionStatus -> ActionType -> Maybe Date -> Maybe Date -> Id -> String -> Region -> ActionResult [actionId] :: ActionResult -> Id [actionStatus] :: ActionResult -> ActionStatus [actionType] :: ActionResult -> ActionType [actionStartedAt] :: ActionResult -> Maybe Date [actionCompletedAt] :: ActionResult -> Maybe Date [actionResourceId] :: ActionResult -> Id [actionResourceType] :: ActionResult -> String [actionRegionSlug] :: ActionResult -> Region data ActionStatus InProgress :: ActionStatus Completed :: ActionStatus Errored :: ActionStatus data ActionType PowerOff :: ActionType PowerOn :: ActionType MakeSnapshot :: ActionType data Action DoPowerOff :: Action DoPowerOn :: Action CreateSnapshot :: String -> Action -- | Type of Domain zones -- -- https://developers.digitalocean.com/documentation/v2/#domains data Domain Domain :: String -> Int -> String -> Domain [domainName] :: Domain -> String [domainTTL] :: Domain -> Int [zone_file] :: Domain -> String -- | Enumeration of possible DNS records types data DNSType A :: DNSType CNAME :: DNSType TXT :: DNSType PTR :: DNSType SRV :: DNSType NS :: DNSType AAAA :: DNSType MX :: DNSType -- | Type of Domain zone file entries -- -- -- https://developers.digitalocean.com/documentation/v2/#domain-records data DomainRecord DomainRecord :: Id -> DNSType -> String -> String -> Maybe Double -> Maybe Int -> Maybe Double -> DomainRecord [recordId] :: DomainRecord -> Id [recordType] :: DomainRecord -> DNSType [recordName] :: DomainRecord -> String [recordData] :: DomainRecord -> String [recordPriority] :: DomainRecord -> Maybe Double [recordPort] :: DomainRecord -> Maybe Int [recordWeight] :: DomainRecord -> Maybe Double failParse :: (Show a1, Monad m) => a1 -> m a instance GHC.Show.Show Network.DO.Types.DomainRecord instance GHC.Generics.Generic Network.DO.Types.DNSType instance GHC.Read.Read Network.DO.Types.DNSType instance GHC.Show.Show Network.DO.Types.DNSType instance GHC.Show.Show Network.DO.Types.Domain instance GHC.Show.Show Network.DO.Types.Action instance GHC.Show.Show Network.DO.Types.ActionResult instance GHC.Show.Show Network.DO.Types.ActionType instance GHC.Show.Show Network.DO.Types.ActionStatus instance GHC.Show.Show Network.DO.Types.Size instance GHC.Show.Show Network.DO.Types.Key instance GHC.Show.Show Network.DO.Types.Image instance GHC.Show.Show Network.DO.Types.ImageType instance GHC.Show.Show Network.DO.Types.Droplet instance GHC.Show.Show Network.DO.Types.Networks instance GHC.Generics.Generic Network.DO.Types.Networks instance GHC.Show.Show (Network.DO.Types.Network a) instance GHC.Classes.Eq Network.DO.Types.NetType instance GHC.Show.Show Network.DO.Types.NetType instance GHC.Show.Show Network.DO.Types.Status instance GHC.Classes.Eq Network.DO.Types.Status instance GHC.Show.Show Network.DO.Types.Date instance GHC.Show.Show (Network.DO.Types.Bytes a) instance GHC.Show.Show Network.DO.Types.BoxConfiguration instance GHC.Classes.Eq Network.DO.Types.SizeSlug instance GHC.Classes.Ord Network.DO.Types.SizeSlug instance GHC.Enum.Enum Network.DO.Types.SizeSlug instance GHC.Read.Read Network.DO.Types.ToolConfiguration instance GHC.Show.Show Network.DO.Types.ToolConfiguration instance GHC.Read.Read Network.DO.Types.Error instance GHC.Show.Show Network.DO.Types.Error instance GHC.Classes.Eq Network.DO.Types.Error instance Data.Default.Class.Default Network.DO.Types.ToolConfiguration instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.Region instance GHC.Show.Show Network.DO.Types.Region instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Region instance GHC.Show.Show Network.DO.Types.SizeSlug instance GHC.Read.Read Network.DO.Types.SizeSlug instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.SizeSlug instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.SizeSlug instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.BoxConfiguration instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Bytes Network.DO.Types.Mega) instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Bytes Network.DO.Types.Giga) instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Date instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Status instance Data.Aeson.Types.FromJSON.FromJSON Data.IP.Addr.IP instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.NetType instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Network Network.DO.Types.V4) instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Network Network.DO.Types.V6) instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Networks instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Droplet instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ImageType instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Image instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Key instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Size instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ActionResult instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ActionStatus instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ActionType instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.ActionType instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.Action instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Domain instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.DNSType instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.DNSType instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.DomainRecord module Network.DO.Net.Common rootURI :: String apiVersion :: String () :: String -> String -> String toURI :: String -> URI toList :: (FromJSON a) => Text -> Value -> [a] authorisation :: String -> Options class Listable a listEndpoint :: Listable a => Proxy a -> String listField :: Listable a => Proxy a -> Text queryList :: (ComonadEnv ToolConfiguration w, Monad m, Listable b, FromJSON b) => Proxy b -> w a -> (RESTT m [b], w a) module Network.DO.Droplets.Utils -- | Lookup (first) public IP for given Droplet, if any. publicIP :: Droplet -> Maybe IP -- | Find the first droplet that matches given Id or name findByIdOrName :: String -> [Droplet] -> [Droplet] module Network.DO.Pretty class (Show a) => Pretty a where pretty = text . show pretty :: Pretty a => a -> Doc outputResult :: (Pretty a, MonadIO m) => a -> m () instance Network.DO.Pretty.Pretty () instance (Network.DO.Pretty.Pretty a, Network.DO.Pretty.Pretty b) => Network.DO.Pretty.Pretty (Data.Either.Either a b) instance Network.DO.Pretty.Pretty a => Network.DO.Pretty.Pretty (GHC.Base.Maybe a) instance Network.DO.Pretty.Pretty GHC.Types.Char instance Network.DO.Pretty.Pretty Network.DO.Types.Error instance Network.DO.Pretty.Pretty Network.DO.Types.Date instance Network.DO.Pretty.Pretty Network.DO.Types.Droplet instance Network.DO.Pretty.Pretty Network.DO.Types.Status instance Network.DO.Pretty.Pretty Network.DO.Types.NetType instance Network.DO.Pretty.Pretty Data.IP.Addr.IP instance Network.DO.Pretty.Pretty Network.DO.Types.Region instance Network.DO.Pretty.Pretty Network.DO.Types.Networks instance Network.DO.Pretty.Pretty (Network.DO.Types.Network a) instance Network.DO.Pretty.Pretty (Network.DO.Types.Bytes Network.DO.Types.Giga) instance Network.DO.Pretty.Pretty (Network.DO.Types.Bytes Network.DO.Types.Mega) instance Network.DO.Pretty.Pretty a => Network.DO.Pretty.Pretty [a] instance Network.DO.Pretty.Pretty Network.DO.Types.Key instance Network.DO.Pretty.Pretty Network.DO.Types.Image instance Network.DO.Pretty.Pretty Network.DO.Types.TransferRate instance Network.DO.Pretty.Pretty Network.DO.Types.SizeSlug instance Network.DO.Pretty.Pretty Network.DO.Types.Size instance Network.DO.Pretty.Pretty Network.DO.Types.ActionResult module Network.DO.Pairing class (Functor f, Functor g) => Pairing f g pair :: Pairing f g => (a -> b -> r) -> f a -> g b -> r class (Functor f, Functor g, Monad m) => PairingM f g m pairM :: PairingM f g m => (a -> b -> m r) -> f a -> g b -> m r pairEffect :: (Pairing f g, Comonad w, Monad m) => (a -> b -> r) -> CofreeT f w a -> FreeT g m b -> m r pairEffectM :: (PairingM f g m, Comonad w) => (a -> b -> m r) -> CofreeT f w (m a) -> FreeT g m b -> m r pairEffect' :: (Pairing f g, Comonad w, Monad m) => (a -> b -> m r) -> CofreeT f w a -> FreeT g m b -> m r injr :: (Monad m, Functor f, Functor g) => g a -> FreeT (Sum f g) m a injl :: (Monad m, Functor f, Functor g) => f a -> FreeT (Sum f g) m a instance Network.DO.Pairing.Pairing Data.Functor.Identity.Identity Data.Functor.Identity.Identity instance Network.DO.Pairing.Pairing ((->) a) ((,) a) instance Network.DO.Pairing.Pairing ((,) a) ((->) a) instance GHC.Base.Monad m => Network.DO.Pairing.PairingM ((,) (m a)) ((->) a) m instance (GHC.Base.Monad m, Network.DO.Pairing.PairingM f h m, Network.DO.Pairing.PairingM g k m) => Network.DO.Pairing.PairingM (Data.Functor.Sum.Sum f g) (Data.Functor.Product.Product h k) m instance (GHC.Base.Monad m, Network.DO.Pairing.PairingM h f m, Network.DO.Pairing.PairingM k g m) => Network.DO.Pairing.PairingM (Data.Functor.Product.Product h k) (Data.Functor.Sum.Sum f g) m module Network.DO.Droplets.Commands -- | Available commands for droplets data DropletCommands a type DropletCommandsT = FreeT DropletCommands type CoDropletCommandsT m = CofreeT (CoDropletCommands m) -- | Comonadic interpreter for DropletCommands data CoDropletCommands m k CoDropletCommands :: (m [Droplet], k) -> (BoxConfiguration -> (m (Result Droplet), k)) -> (Id -> (m (Maybe String), k)) -> (Id -> Action -> (m (Result ActionResult), k)) -> (Id -> Id -> (m (Result ActionResult), k)) -> (Id -> (m [Image], k)) -> (Droplet -> (m (Result ()), k)) -> (Id -> (m (Result Droplet), k)) -> CoDropletCommands m k [listDropletsH] :: CoDropletCommands m k -> (m [Droplet], k) [createDropletH] :: CoDropletCommands m k -> BoxConfiguration -> (m (Result Droplet), k) [destroyDropletH] :: CoDropletCommands m k -> Id -> (m (Maybe String), k) [actionDropletH] :: CoDropletCommands m k -> Id -> Action -> (m (Result ActionResult), k) [getActionH] :: CoDropletCommands m k -> Id -> Id -> (m (Result ActionResult), k) [listSnapshotsH] :: CoDropletCommands m k -> Id -> (m [Image], k) [consoleH] :: CoDropletCommands m k -> Droplet -> (m (Result ()), k) [showDropletH] :: CoDropletCommands m k -> Id -> (m (Result Droplet), k) listDroplets :: DropletCommands [Droplet] createDroplet :: BoxConfiguration -> DropletCommands (Result Droplet) destroyDroplet :: Id -> DropletCommands (Maybe String) dropletAction :: Id -> Action -> DropletCommands (Result ActionResult) showDroplet :: Id -> DropletCommands (Result Droplet) getAction :: Id -> Id -> DropletCommands (Result ActionResult) listDropletSnapshots :: Id -> DropletCommands [Image] dropletConsole :: Droplet -> DropletCommands (Result ()) instance GHC.Base.Functor (Network.DO.Droplets.Commands.CoDropletCommands m) instance GHC.Base.Functor Network.DO.Droplets.Commands.DropletCommands instance GHC.Base.Monad m => Network.DO.Pairing.PairingM (Network.DO.Droplets.Commands.CoDropletCommands m) Network.DO.Droplets.Commands.DropletCommands m -- | Network interpreter for Droplets specific API module Network.DO.Droplets.Net dropletCommandsInterpreter :: (MonadIO m, ComonadEnv ToolConfiguration w) => w a -> CoDropletCommands (RESTT m) (w a) instance Network.DO.Net.Common.Listable Network.DO.Types.Droplet module Network.DO.Commands data DO a ListKeys :: ([Key] -> a) -> DO a ListSizes :: ([Size] -> a) -> DO a ListImages :: ([Image] -> a) -> DO a ListRegions :: ([Region] -> a) -> DO a type DOT = FreeT DO listKeys :: DO [Key] listSizes :: DO [Size] listImages :: DO [Image] listRegions :: DO [Region] data CoDO m k CoDO :: (m [Key], k) -> (m [Size], k) -> (m [Image], k) -> (m [Region], k) -> CoDO m k [listKeysH] :: CoDO m k -> (m [Key], k) [listSizesH] :: CoDO m k -> (m [Size], k) [listImagesH] :: CoDO m k -> (m [Image], k) [listRegionsH] :: CoDO m k -> (m [Region], k) type CoDOT m = CofreeT (CoDO m) instance GHC.Base.Functor (Network.DO.Commands.CoDO m) instance GHC.Base.Functor Network.DO.Commands.DO instance GHC.Base.Monad m => Network.DO.Pairing.PairingM (Network.DO.Commands.CoDO m) Network.DO.Commands.DO m -- | Interpreter for accessing DO API through the web using [wreq -- http://www.serpentine.com/wreq]. module Network.DO.Net mkDOClient :: (MonadIO m) => ToolConfiguration -> CofreeT (Product (CoDO (RESTT m)) (CoDropletCommands (RESTT m))) (Env ToolConfiguration) (RESTT m ()) instance Network.DO.Net.Common.Listable Network.DO.Types.Key instance Network.DO.Net.Common.Listable Network.DO.Types.Size instance Network.DO.Net.Common.Listable Network.DO.Types.Image instance Network.DO.Net.Common.Listable Network.DO.Types.Region