module Docs.CLI.Types where import Data.Text (Text) import qualified Data.Text as Text type Url = String -- | Appears at the end of a url after a pound sign, pointing the element to -- focus on. -- https://hackage.haskell.org/package/hoogle-5.0.18.1/docs/Hoogle.html#t:Target -- ^^^^^^^^ type Anchor = Text dropAnchor :: Url -> Url dropAnchor = takeWhile (/= '#') takeAnchor :: MonadFail m => Url -> m Anchor takeAnchor url = case drop 1 $ dropWhile (/= '#') url of [] -> fail "no anchor" xs -> return $ Text.pack xs data DeclUrl = DeclUrl ModuleUrl Anchor deriving (Eq, Show) -- | Link to an item in a src page data SourceLink = SourceLink Url Anchor deriving (Eq, Show) newtype ModuleUrl = ModuleUrl Url deriving (Eq, Show) -- | Url to a Haddock package page newtype PackageUrl = PackageUrl Url deriving (Eq, Show) type FileName = String type FileContent = Text newtype RelativeUrl = RelativeUrl Text data FileInfo = FileInfo { fName :: FileName , fLine :: Maybe Int , fContent :: FileContent } class HasUrl a where getUrl :: a -> Url instance HasUrl DeclUrl where getUrl (DeclUrl url anchor) = getUrl url ++ "#" ++ Text.unpack anchor instance HasUrl ModuleUrl where getUrl (ModuleUrl url) = url instance HasUrl SourceLink where getUrl (SourceLink url _) = url instance HasUrl PackageUrl where getUrl (PackageUrl url) = url instance HasUrl Url where getUrl url = url