module FP.API.Types where
import Data.Data
import Language.Fay.Yesod
import Prelude
import FFI
#ifndef FAY
import Data.Default (Default(..))
import Database.Persist.Sql (PersistField, PersistFieldSql)
import Database.Persist.TH (derivePersistField)
import System.Random (Random)
#endif
data FayProjectId = FayProjectId { unFayProjectId :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data ProjectState = Workspaces | UserState
#ifdef FAY
deriving (Read, Typeable, Data, Show, Eq)
#else
deriving (Show, Eq, Read, Data, Typeable, Enum, Bounded, Ord)
derivePersistField "ProjectState"
#endif
data MergeModifyKind = Modified | Added | Deleted | TypeChanged
#ifdef FAY
deriving (Read, Typeable, Data, Show, Eq)
#else
deriving (Show, Eq, Read, Data, Typeable, Enum, Bounded, Ord)
derivePersistField "MergeModifyKind"
#endif
data MergeModifyPair = MergeModifyPair MergeModifyKind MergeModifyKind
#ifdef FAY
deriving (Read, Typeable, Data, Show, Eq)
#else
deriving (Show, Eq, Read, Data, Typeable, Bounded)
derivePersistField "MergeModifyPair"
#endif
data FayModuleId = FayModuleId (Maybe FayFileName)
FayModuleName
PackageId
deriving (Read, Typeable, Data, Show, Eq)
data FayRunConfigId = FayRunConfigId { unFayRunConfigId :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data CanFail a = Success (Automatic a) | Failure Text
deriving (Read, Typeable, Data, Show, Eq)
#ifndef FAY
deriving instance Functor CanFail
#endif
type Returns' a = Returns (CanFail a)
data IdeCommand
= SaveProfile Theme Int Bool (Returns' ())
| GetInitialProjectInfo FayProjectId (Returns' InitialProjectInfo)
| ReparseProjectSettings FayProjectId (Returns' ReparseSettingsOutput)
| GetSettings FayProjectId (Returns' GetSettingsOutput)
| SetSettings SetSettingsInput FayProjectId (Returns' (Maybe CompileId))
| GetKeterYaml FayDeploymentId FayModuleName FayProjectId (Returns' KeterYaml)
| SetRunConfigs [(FayRunConfigId,RunConfig)] FayProjectId (Returns' ())
| SetDeployments [(FayDeploymentId,Deployment)] FayProjectId (Returns' ())
| GetNewRunConfig FayProjectId (Returns' NewRunConfig)
| GetNewDeployment FayProjectId (Returns' NewDeployment)
| GetNewWebApp FayDeploymentId FayProjectId (Returns' NewWebApp)
| GetNewBgJob FayDeploymentId FayProjectId (Returns' NewBgJob)
| SetPublic Publicize FayProjectId (Returns' (Maybe GitHistoryItem))
| SetProjectMetadata Text Text FayProjectId (Returns' ())
| DeleteProject Text FayProjectId (Returns' ())
| CheckHostName Text FayProjectId (Returns' UseHostName)
| GetRandomHostName FayProjectId (Returns' RandomHostName)
| GetDeploymentManagerInfo FayProjectId (Returns' DeploymentManagerInfo)
| SaveProjectState ProjectState Text FayProjectId (Returns' ())
| LoadProjectState ProjectState FayProjectId (Returns' MaybeText)
| AddFile FileInfo FayProjectId (Returns' SaveFileOutput)
| SaveFile FayFileName Text FayTutorialToken FayProjectId (Returns' SaveFileOutput)
| DeleteFile FayFileName FayProjectId (Returns' CompileChanged)
| RenameFile FayFileName FileInfo RenameType FayProjectId (Returns' RenameFileOutput)
| GetFile FayFileName FayProjectId (Returns' FileContent)
| GetFileToken FayFileName FayProjectId (Returns' FayTutorialToken)
| GetAllFiles FayProjectId (Returns' [(FayFileName, ModuleIncluded)])
| SetModuleExclusion FayFileName Bool FayProjectId (Returns' CompileChanged)
| GetTypeInfo SourceSpan Int FayProjectId (Returns' ())
| GetDefinitionSource SourceSpan FayProjectId (Returns' ())
| GetAutocompletions AutoCompleteInput FayProjectId (Returns' ())
| IdeHoogleSearch (Maybe FayFileName) Bool Int Int Int Text FayProjectId (Returns' HoogleId)
| GetProjectMessages ProjectMessagesRequest FayProjectId (Returns' ProjectMessagesOutput)
| SetTarget (Maybe (Either FayFileName FayRunConfigId)) FayProjectId (Returns' CompileChanged)
| GetTarget FayProjectId (Returns' (Maybe (Either FayFileName FayRunConfigId)))
| RunTarget FayProjectId (Returns' ProcId)
| CompileBinary FayFileName [(Text, Text)] FayProjectId (Returns' BuildId)
| UploadBuild BuildResult FayProjectId (Returns' UploadedBuild)
| CommitToGit Text FayProjectId (Returns' ())
| GetGitHistory Int Int FayProjectId (Returns' GitHistory)
| IsProjectDirty FayProjectId (Returns' Bool)
| ResetProject FayProjectId (Returns' InitialProjectInfo)
| SetRoot Text Text FayProjectId (Returns' InitialProjectInfo)
| GitPush Text FayProjectId (Returns' ())
| GitPull Text FayProjectId (Returns' GitPullResult)
| GitMergeAbort Text FayProjectId (Returns' InitialProjectInfo)
| GitMergeDone Text MaybeText FayProjectId (Returns' GitResolvedResult)
| GitResolveFile FayFileName FayProjectId (Returns' ())
| GitDiff FayProjectId (Returns' Text)
| SetRemotes RemotesList FayProjectId (Returns' ())
| CheckoutBranch Text FayProjectId (Returns' GitCheckoutResult)
| CreateBranch Text Text FayProjectId (Returns' ())
| DeleteBranch Text FayProjectId (Returns' ())
| BranchFromCommit Text Text FayProjectId (Returns' ())
| UserAuthedGithub (Returns (CanFail Bool))
| RevokeGithub (Returns (CanFail ()))
| GetGithubUrl Text (Returns (CanFail Text))
| SshPublicKey (Returns (CanFail Text))
| ReformatModule FayFileName FayProjectId (Returns' CompileChanged)
| GetConfigurationProject (Returns' Text)
| GenerateConfiguration (Returns' ())
| SetConfigurationJavascript Text (Returns' ())
| RenderFileMarkdown FayFileName FayProjectId (Returns' HtmlReply)
| GetTrialExpiry (Returns' ExpiryTime)
| ShowTrialSignup (Returns' Bool)
| RestartBackend FayProjectId (Returns' ())
| SearchProject SearchQuery Int Int Bool FayProjectId (Returns' ())
| CloseAllProjects (Returns' ())
| SdistTarball FayProjectId (Returns' ())
| GetProjectId Text (Returns' FayProjectId)
deriving (Read, Typeable, Data, Show, Eq)
data InitialProjectInfo = InitialProjectInfo
{ ipiTitle :: Text
, ipiDesc :: Text
, ipiGitUrl :: Maybe Text
, ipiMergeConflicts :: Maybe [MergeConflict]
, ipiInvalidSettings :: Bool
, ipiState :: [(ProjectState, Text)]
, ipiFiles :: [(FayFileName, ModuleIncluded)]
, ipiTarget :: Maybe (Either FayFileName FayRunConfigId)
, ipiPublished :: Maybe GitHistoryItem
, ipiBranches :: BranchesList
, ipiRemotes :: RemotesList
, ipiRunConfigs :: [(FayRunConfigId,RunConfig)]
, ipiDeployments :: [(FayDeploymentId,Deployment)]
, ipiTheme :: Theme
, ipiFontSize :: Int
, ipiSearchWithRegex :: Bool
, ipiLicense :: IdeLicense
, ipiCanPublish :: Bool
}
deriving (Read, Typeable, Data, Show, Eq)
data IdeLicense = ILCommunity | ILPersonal | ILProfessional
deriving (Read, Typeable, Data, Show, Eq)
data TypeInfo = TypeInfo SourceSpan Text Text
deriving (Read, Typeable, Data, Show, Eq)
data MaybeText = NoText | JustText Text
deriving (Read, Typeable, Data, Show, Eq)
data GitCheckoutResult
= GCRDirty
| GCROk (Maybe InitialProjectInfo)
deriving (Read, Typeable, Data, Show, Eq)
data GitPullResult = GPRSuccess InitialProjectInfo
| GPRDirtyTree
| GPRManualMerge Text InitialProjectInfo
deriving (Read, Typeable, Data, Show, Eq)
data GitResolvedResult = GRRSuccess
| GRRStillUnresolved [MergeConflict]
deriving (Read, Typeable, Data, Show, Eq)
data GitMergeConflictsResult = GitMergeConflictsResult [MergeConflict]
deriving (Read, Typeable, Data, Show, Eq)
data MergeConflict = MergeConflict
{ mergeFile :: FayFileName
, mergeState :: MergeModifyPair
}
deriving (Read, Typeable, Data, Show, Eq)
data GitHistory = GitHistory [GitHistoryItem]
deriving (Read, Typeable, Data, Show, Eq)
data GitHistoryItem = GitHistoryItem
{ ghiDate :: Text
, ghiAuthor :: Text
, ghiLog :: Text
, ghiHash :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data RemotesList = RemotesList [(Text,Text)]
deriving (Read, Typeable, Data, Show, Eq)
data BranchesList = BranchesList Text [Text]
deriving (Read, Typeable, Data, Show, Eq)
data ReparseSettingsOutput
= SettingsAlreadyValid
| ReparseSuccessful InitialProjectInfo
deriving (Read, Typeable, Data, Show, Eq)
data GetSettingsOutput = GetSettingsOutput
{ gsoModuleTemplate :: Text
, gsoExtensions :: [(Text, Maybe Bool)]
, gsoEnvironment :: Environment
, gsoEnvironments :: [Environment]
, gsoGhcArgs :: [Text]
, gsoExtraPackages :: Text
, gsoHiddenPackages :: Text
, gsoCabalName :: Text
, gsoCabalVersion :: Text
, gsoRoot :: Text
, gsoFilters :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data SetExtension = SetExtension Text Bool
deriving (Read, Typeable, Data, Show, Eq)
data SetSettingsInput = SetSettingsInput
{ ssiModuleTemplate :: Text
, ssiExtensions :: [SetExtension]
, ssiEnvironment :: Text
, ssiGhcArgs :: [Text]
, ssiExtraPackages :: Text
, ssiHiddenPackages :: Text
, ssiCabalName :: Text
, ssiCabalVersion :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data Environment = Environment
{ envName :: Text
, envTitle :: Text
, envURL :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data RunGhciOutput = RunGhciOutput ProcId FayProjectId
deriving (Read, Typeable, Data, Show, Eq)
data TopLevelIdentifiers = TopLevelIdentifiers [TopLevelIdentifier]
deriving (Read, Typeable, Data, Show, Eq)
data TopLevelIdentifier = TopLevelIdentifier
{ tliLine :: Int
, tliColumn :: Int
, tliName :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data SourceSpan = SourceSpan
{ spanFilePath :: FayFileName
, spanFromLine :: Int
, spanFromColumn :: Int
, spanToLine :: Int
, spanToColumn :: Int }
deriving (Read, Typeable, Data, Show, Eq)
data EitherSpan =
ProperSpan SourceSpan
| TextSpan String
deriving (Read, Typeable, Data, Show, Eq)
data SourceInfo = SourceInfo
{ infoKind :: SourceInfoKind
, infoSpan :: EitherSpan
, infoMsg :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data SourceInfoKind = KindError | KindWarning | KindHint
deriving (Read, Typeable, Data, Show, Eq)
data IsWebResult
= IsWeb
| NotSureIfWeb
deriving (Read, Typeable, Data, Show, Eq)
data TextReply
= TextReply { unTextReply :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data HtmlReply
= HtmlReply { unHtmlReply :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data ProjectStartStatus = PSSUpdate Text Int | PSSFinal Text
deriving (Read, Typeable, Data, Show, Eq)
data MaybeStartToken = NoStartToken | StartToken Int
deriving (Read, Typeable, Data, Show, Eq)
data RunConfig = RunConfig
{ rcTitle :: Text
, rcMainFile :: Maybe FayFileName
, rcArgs :: [Text]
, rcEnv :: [(Text,Text)]
} deriving (Read, Typeable, Data, Show, Eq)
data NewRunConfig = NewRunConfig (FayRunConfigId,RunConfig)
deriving (Read, Typeable, Data, Show, Eq)
data Deployment = Deployment
{ depTitle :: Text
, depStanzas :: [Stanza]
} deriving (Read, Typeable, Data, Show, Eq)
data Stanza = WebAppStanza FayWebAppId WebApp
| BgJobStanza FayBgJobId BgJob
deriving (Read, Typeable, Data, Show, Eq)
data NewDeployment = NewDeployment (FayDeploymentId,Deployment)
deriving (Read, Typeable, Data, Show, Eq)
data WebApp = WebApp
{ wapTitle :: Text
, wapHostname :: Maybe Text
, wapFileName :: Maybe FayFileName
, wapArgs :: [Text]
, wapEnv :: [(Text,Text)]
, wapSsl :: Bool
} deriving (Read, Typeable, Data, Show, Eq)
data NewWebApp = NewWebApp (FayWebAppId,WebApp)
deriving (Read, Typeable, Data, Show, Eq)
data BgJob = BgJob
{ bgTitle :: Text
, bgFileName :: Maybe FayFileName
, bgArgs :: [Text]
, bgEnv :: [(Text,Text)]
, bgRestartLimit :: Maybe Int
, bgRestartDelay :: Int
} deriving (Read, Typeable, Data, Show, Eq)
data NewBgJob = NewBgJob (FayBgJobId,BgJob)
deriving (Read, Typeable, Data, Show, Eq)
data UseHostName = HostnameInUse
| HostnameOK
| HostnameQuotaExcess
| HostnameInvalid
deriving (Read, Typeable, Data, Show, Eq)
data KeterYaml = KeterYaml
{ keterYaml :: Text
, deployYaml :: Text
}
deriving (Read,Typeable,Data,Show,Eq)
data RandomHostName = RandomHostName { unRandomHostname :: Text }
deriving (Read,Typeable,Data,Show,Eq)
data ExpiryTime = ExpiryTime (Maybe Integer)
deriving (Read,Typeable,Data,Show,Eq)
data DeploymentManagerInfo = DeploymentManagerInfo
{ dmiHostname :: Text }
deriving (Read,Typeable,Data,Show,Eq)
data FayManualMergeId = FayManualMergeId { unFayManualMergeId :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data FayDeploymentId = FayDeploymentId { unFayDeploymentId :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data FayBgJobId = FayBgJobId { unFayBgJobId :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data FayWebAppId = FayWebAppId { unFayWebAppId :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data Theme = Panda | Zenburn | Monokai
#ifdef FAY
deriving (Read,Typeable,Data,Show,Eq)
#else
deriving (Show, Eq, Read, Data, Typeable, Bounded, Enum)
#endif
data SearchQuery
= SearchQueryRegex Text
| SearchQueryPlain Text
deriving (Read,Typeable,Data,Show,Eq)
data Publicize = NotPublic
| Publicize Text
deriving (Read,Typeable,Data,Show,Eq)
data FayFileName = FayFileName { unFayFileName :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data FayModuleName = FayModuleName { unFayModuleName :: Text }
deriving (Read, Typeable, Data, Show, Eq)
data FileInfo = FileInfo
{ fiPath :: FayFileName
, fiModule :: Maybe FayModuleName
}
deriving (Read, Typeable, Data, Show, Eq)
data FileChanged = FileChanged
{ fcPath :: FayFileName
, fcModule :: Maybe ModuleIncluded
}
deriving (Read, Typeable, Data, Show, Eq)
data ModuleIncluded
= ModuleExcluded
| ModuleWrongExtension
| ModuleNotTextual
| ModuleHeaderFilenameMismatch FayModuleName
| ModuleNameAmbiguous FayModuleName
| ModuleIncluded FayModuleName
deriving (Read, Typeable, Data, Show, Eq)
data RenameType = RenamePlain | RenameHeader | RenameHeaderAndImports | RenameHeaderAndImportsForce
deriving (Read, Typeable, Data, Show, Eq)
data CompileChanged = CompileChanged
{ ccCompileId :: Maybe CompileId
, ccFiles :: [FileChanged]
}
deriving (Read, Typeable, Data, Show, Eq)
data RenameFileOutput
= RenameFileOutput (Maybe Text) CompileChanged
| WarnImportRenaming [FayFileName]
deriving (Read, Typeable, Data, Show, Eq)
data SaveFileOutput = SaveFileOutput FayTutorialToken CompileChanged
deriving (Read, Typeable, Data, Show, Eq)
data FileContent = FileContent
{ dfcContent :: Maybe Text
, dfcToken :: FayTutorialToken
}
deriving (Read, Typeable, Data, Show, Eq)
type FayTutorialToken = TutorialConcurrentToken
#ifdef FAY
data TutorialConcurrentToken = TutorialConcurrentToken'
{ unTutorialConcurrentToken :: Int }
deriving (Eq, Show, Data, Read, Typeable)
#else
newtype TutorialConcurrentToken = TutorialConcurrentToken'
{ unTutorialConcurrentToken :: Int }
deriving (Eq, Show, Data, Read, Typeable, PersistField, PersistFieldSql, Random, Num)
instance Default TutorialConcurrentToken where
def = TutorialConcurrentToken' 1
#endif
data CompileId = CompileId { unCompileId :: Int }
deriving (Read, Typeable, Data, Show, Eq)
data ProcId = ProcId { unProcId :: Int }
deriving (Read, Typeable, Data, Show, Eq)
data BuildId = BuildId { unBuildId :: Int }
deriving (Read, Typeable, Data, Show, Eq)
data HoogleId = HoogleId { unHoogleId :: Int }
deriving (Read, Typeable, Data, Show, Eq)
data SearchId = SearchId { unSearchId :: Int }
deriving (Read, Typeable, Data, Show, Eq)
data ProjectMessagesRequest
= PMRImmediateStatusNoMessages
| PMRImmediateStatusWithMessages ProjectMessagesFilter
| PMRNextStatusWithMessages ProjectMessagesFilter StatusHash
deriving (Read, Typeable, Data, Show, Eq)
data ProjectMessagesOutput
= ProjectMessagesOutput ProjectMessagesFilter [(Maybe Int, RunnerMessage)]
deriving (Read, Typeable, Data, Show, Eq)
data StatusHash = StatusHash Text
deriving (Read, Typeable, Data, Show, Eq)
data ProjectMessagesFilter
= PMFilterNone
| PMFilterAll
| PMFilterOnOrBefore Integer
deriving (Read, Typeable, Data, Show, Eq)
data MessageTag = MessageTag
{ mtProjectId :: Maybe FayProjectId
, mtJobId :: Maybe Int
}
deriving (Read, Typeable, Data, Show, Eq)
data RunnerMessageEnvelope = RunnerMessageEnvelope
{ rmeSeqNumber :: Integer
, rmeMessageTag :: MessageTag
, rmeMessage :: RunnerMessage
}
deriving (Read, Typeable, Data, Show, Eq)
data RunnerMessage
= ProjectMessage
{ rmPsLevel :: LogLevel
, rmPsMessage :: Text
}
| ProcessOutput Text
| ProcessOutputError Text
| StatusSnapshot ProjectStatusSnapshot StatusHash
| IdInfoResults IdInfo
| SubExprsResults SourceSpan [[TypeInfo]]
| AutoCompleteResults (Maybe AutoCompleteInput) [Text]
| ImportedPackagesResults [PackageId]
| SearchResults [SearchResult]
| HoogleResults Text [HoogleResult] (Maybe Int)
| ProjectHasClosed
| FayCompileResults Text
deriving (Read, Typeable, Data, Show, Eq)
data LogLevel
= LevelDebug
| LevelInfo
| LevelWarn
| LevelError
| LevelOther Text
deriving (Read, Typeable, Data, Show, Eq)
data ProjectStatusSnapshot = ProjectStatusSnapshot
{ snapOpeningStatus :: RunnerOpeningStatus
, snapCompileStatus :: RunnerCompileStatus
, snapProcessStatus :: ProcessStatusSnapshot
, snapBuildStatus :: RunnerBuildStatus
}
deriving (Read, Typeable, Data, Show, Eq)
data IdInfo
= NoIdInfo SourceSpan
| IdInfo SourceSpan SourceSpan DefinitionSource
deriving (Read, Typeable, Data, Show, Eq)
data DefinitionSource = DefinitionLocal SourceSpan
| DefinitionTextSpan Text Text
| DefinitionImported Text FayModuleId FayModuleId EitherSpan EitherSpan
| DefinitionWiredIn Text
| DefinitionBinder Text
deriving (Read, Typeable, Data, Show, Eq)
data AutoCompleteInput = AutoCompleteInput
{ aciModuleName :: FayFileName
, aciPrefix :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data PackageId = PackageId
{ packageName :: Text
, packageVersion :: Maybe Text
}
deriving (Read, Typeable, Data, Show, Eq)
data SearchResult = SearchResult SourceSpan [Either Text Text]
deriving (Read, Typeable, Data, Show, Eq)
data HoogleResult = HoogleResult
{ hrURL :: String
, hrSources :: [(PackageLink, [ModuleLink])]
, hrTitle :: String
, hrBody :: String
}
deriving (Read, Typeable, Data, Show, Eq)
data PackageLink = PackageLink
{ plName :: String
, plURL :: String
}
deriving (Read, Typeable, Data, Show, Eq)
data ModuleLink = ModuleLink
{ mlName :: String
, mlURL :: String
}
deriving (Read, Typeable, Data, Show, Eq)
data RunnerOpeningStatus
= RunnerProjectOpening Text
| RunnerProjectOpen
deriving (Read, Typeable, Data, Show, Eq)
data RunnerCompileStatus
= RunnerNotCompiling
| RunnerCompiling CompileId Progress
| RunnerCompileDone CompileId [SourceInfo]
deriving (Read, Typeable, Data, Show, Eq)
data ProcessStatusSnapshot
= SnapshotNoProcess
| SnapshotProcessQueued ProcId
| SnapshotProcessRunning ProcId LaunchInfoSnapshot PortListeningResult
| SnapshotProcessExited ProcId LaunchInfoSnapshot
| SnapshotProcessLoadFailed ProcId Text
| SnapshotProcessRunFailed ProcId Text
| SnapshotProcessUserException ProcId Text
| SnapshotProcessGhcException ProcId Text
| SnapshotProcessForceCanceled ProcId
deriving (Read, Typeable, Data, Show, Eq)
data RunnerBuildStatus
= RunnerNotBuilding
| RunnerBuildQueued
{ rbsId :: BuildId
}
| RunnerBuilding
{ rbsId :: BuildId
, rbsProgress :: Progress
}
| RunnerBuildFailed
{ rbsId :: BuildId
, rbsMsg :: Text
}
| RunnerBuildDone
{ rbsId :: BuildId
, rbsResult :: BuildResult
}
deriving (Read, Typeable, Data, Show, Eq)
data BuildResult = BuildResult
{ brPathName :: Text
, brMainModule :: Text
, brFileSize :: Int
}
deriving (Read, Typeable, Data, Show, Eq)
data UploadedBuild = UploadedBuild
{ ubUrl :: Text
, ubExe :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data Progress = Progress
{
progressStep :: Int
, progressNumSteps :: Int
, progressMsg :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data LaunchInfoSnapshot = LaunchInfoSnapshot
{ liSnapApproot :: Maybe Text
, liSnapPort :: Maybe Int
, liSnapLaunched :: Text
}
deriving (Read, Typeable, Data, Show, Eq)
data PortListeningResult
= ProcessNotRunning
| PortNotListening
| PortIsListening
| PortNotAllocated
deriving (Read, Typeable, Data, Show, Eq)