-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A generator of comics based on some ascertainable data about the requester. -- -- This package was writen to power xkcd's 2012 April Fools comic -- Umwelt. It uses several datasets and a script to generate a -- customized story specific to the user viewing it. @package waldo @version 0 module Waldo.Stalk data OS BSD :: OS Linux :: OS Windows :: OS Mac :: OS data Browser Chrome :: Browser Safari :: Browser FireFox :: Browser InternetExplorer :: Browser Opera :: Browser Netscape :: Browser data NetSpeed Dialup :: NetSpeed Cellular :: NetSpeed CableDSL :: NetSpeed Corporate :: NetSpeed data PersonalData PersonalData :: [ByteString] -> Maybe ByteString -> Maybe ByteString -> Maybe NetSpeed -> Maybe ByteString -> Maybe URI -> Maybe Browser -> Maybe OS -> Maybe Coord -> (Int, Int) -> Maybe BrowserEntry -> StalkRequest -> PersonalData [pdLocal] :: PersonalData -> [ByteString] [pdOrg] :: PersonalData -> Maybe ByteString [pdISP] :: PersonalData -> Maybe ByteString [pdNetSpeed] :: PersonalData -> Maybe NetSpeed [pdReferer] :: PersonalData -> Maybe ByteString [pdRefURI] :: PersonalData -> Maybe URI [pdBrowser] :: PersonalData -> Maybe Browser [pdOS] :: PersonalData -> Maybe OS [pdLatLon] :: PersonalData -> Maybe Coord [pdScreen] :: PersonalData -> (Int, Int) [pdBrowserEntry] :: PersonalData -> Maybe BrowserEntry [pdStalk] :: PersonalData -> StalkRequest data StalkRequest wai2stalk :: Request -> StalkRequest data StalkDB loadStalkDB :: FilePath -> IO StalkDB stalk :: StalkDB -> StalkRequest -> IO PersonalData instance GHC.Show.Show Waldo.Stalk.PersonalData instance GHC.Classes.Eq Waldo.Stalk.PersonalData instance GHC.Show.Show Waldo.Stalk.StalkRequest instance GHC.Classes.Ord Waldo.Stalk.StalkRequest instance GHC.Classes.Eq Waldo.Stalk.StalkRequest instance GHC.Show.Show Waldo.Stalk.NetSpeed instance GHC.Classes.Ord Waldo.Stalk.NetSpeed instance GHC.Classes.Eq Waldo.Stalk.NetSpeed instance GHC.Show.Show Waldo.Stalk.OS instance GHC.Classes.Ord Waldo.Stalk.OS instance GHC.Classes.Eq Waldo.Stalk.OS instance GHC.Show.Show Waldo.Stalk.Browser instance GHC.Classes.Ord Waldo.Stalk.Browser instance GHC.Classes.Eq Waldo.Stalk.Browser instance Data.Aeson.Types.ToJSON.ToJSON Waldo.Stalk.StalkRequest instance Data.Aeson.Types.FromJSON.FromJSON Waldo.Stalk.StalkRequest module Waldo.Script data Script ScriptTo :: !Text -> Script [sTarget] :: Script -> !Text Script :: !Int -> !Int -> !Text -> [Panel] -> !Text -> Script [sWidth] :: Script -> !Int [sHeight] :: Script -> !Int [sAltText] :: Script -> !Text [sPanels] :: Script -> [Panel] [sName] :: Script -> !Text type PanelSizes = [PanelData] data PanelData PanelData :: !Int -> !Int -> [ImagePart] -> [TextPart] -> !Text -> PanelData [pdWidth] :: PanelData -> !Int [pdHeight] :: PanelData -> !Int [pdImages] :: PanelData -> [ImagePart] [pdText] :: PanelData -> [TextPart] [pdName] :: PanelData -> !Text data Panel Panel :: !Pos -> !Int -> !Int -> [ImagePart] -> [TextPart] -> !Text -> Panel [pPos] :: Panel -> !Pos [pWidth] :: Panel -> !Int [pHeight] :: Panel -> !Int [pImages] :: Panel -> [ImagePart] [pText] :: Panel -> [TextPart] [pName] :: Panel -> !Text data ImagePart ImagePart :: !Pos -> !Text -> ImagePart [ipPos] :: ImagePart -> !Pos [ipImageUrl] :: ImagePart -> !Text data TextPart TextPart :: !Pos -> !Text -> !Float -> !Text -> !Float -> TextPart [tpPos] :: TextPart -> !Pos [tpString] :: TextPart -> !Text [tpSize] :: TextPart -> !Float [tpFont] :: TextPart -> !Text [tpAngle] :: TextPart -> !Float data Pos Pos :: !Int -> !Int -> Pos [pX] :: Pos -> !Int [pY] :: Pos -> !Int loadImagePanels :: Int -> Int -> Int -> ReaderT FilePath IO PanelSizes mkScript :: Text -> Text -> [PanelData] -> Script scriptName :: Script -> Text instance GHC.Show.Show Waldo.Script.Script instance GHC.Classes.Ord Waldo.Script.Script instance GHC.Classes.Eq Waldo.Script.Script instance GHC.Show.Show Waldo.Script.Panel instance GHC.Classes.Ord Waldo.Script.Panel instance GHC.Classes.Eq Waldo.Script.Panel instance GHC.Show.Show Waldo.Script.PanelData instance GHC.Classes.Ord Waldo.Script.PanelData instance GHC.Classes.Eq Waldo.Script.PanelData instance GHC.Show.Show Waldo.Script.ImagePart instance GHC.Classes.Ord Waldo.Script.ImagePart instance GHC.Classes.Eq Waldo.Script.ImagePart instance GHC.Show.Show Waldo.Script.TextPart instance GHC.Classes.Ord Waldo.Script.TextPart instance GHC.Classes.Eq Waldo.Script.TextPart instance GHC.Show.Show Waldo.Script.Pos instance GHC.Classes.Ord Waldo.Script.Pos instance GHC.Classes.Eq Waldo.Script.Pos instance Control.DeepSeq.NFData Waldo.Script.Script instance Control.DeepSeq.NFData Waldo.Script.Panel instance Control.DeepSeq.NFData Waldo.Script.ImagePart instance Control.DeepSeq.NFData Waldo.Script.TextPart instance Control.DeepSeq.NFData Waldo.Script.Pos instance Data.Aeson.Types.ToJSON.ToJSON Waldo.Script.Script instance Data.Aeson.Types.ToJSON.ToJSON Waldo.Script.Panel instance Data.Aeson.Types.ToJSON.ToJSON Waldo.Script.ImagePart instance Data.Aeson.Types.ToJSON.ToJSON Waldo.Script.TextPart instance Data.Aeson.Types.ToJSON.ToJSON Waldo.Script.Pos module Waldo.Story selectStory :: ((Int, Int) -> Story -> Maybe Script) -> Script -> [StoryOption] -> PersonalData -> IO Script knapsackSizer :: Int -> (Int, Int) -> Story -> Maybe Script data Story StoryGoto :: Text -> Story [storyGoto] :: Story -> Text Story :: Text -> [PanelSizes] -> Int -> Int -> Text -> Story [storyAltText] :: Story -> Text [storyPanelSets] :: Story -> [PanelSizes] [storyPadX] :: Story -> Int [storyPadY] :: Story -> Int [storyName] :: Story -> Text type StoryGuard = ReaderT PersonalData Maybe () type StoryOption = ReaderT PersonalData Maybe Story isIn :: ByteString -> StoryGuard browserIs :: Browser -> StoryGuard osIs :: OS -> StoryGuard netSpeedIs :: NetSpeed -> StoryGuard orgIs :: ByteString -> StoryGuard orgMatch :: ByteString -> StoryGuard ispIs :: ByteString -> StoryGuard refererDomainIs :: String -> StoryGuard pdTestJustIs :: Eq a => (PersonalData -> Maybe a) -> a -> StoryGuard giveThem :: MonadPlus m => m () -> m a -> m a allocate :: MonadPlus m => m () -> a -> m a instance GHC.Show.Show Waldo.Story.Story module Waldo.Waldo data WaldoData WaldoData :: StalkDB -> HashMap Text (PersonalData -> IO Script) -> WaldoData [wdStalkDB] :: WaldoData -> StalkDB [wdGenScript] :: WaldoData -> HashMap Text (PersonalData -> IO Script) loadWaldo :: FilePath -> [(Text, IO (PersonalData -> IO Script))] -> IO WaldoData module Waldo.Server waldoApp :: WaldoData -> Application module Waldo.CityLoc data CityData CityData :: Coord -> Double -> CityData [cityLoc] :: CityData -> Coord [cityInfluenceKm] :: CityData -> Double mkCity :: Coord -> Double -> CityData closeTo :: CityData -> StoryGuard atlanta :: CityData belfast :: CityData boston :: CityData brisbane :: CityData cambridge :: CityData chicago :: CityData christchurch :: CityData cnu :: CityData dallas :: CityData detroit :: CityData downtownNYC :: CityData greenBay :: CityData halifax :: CityData houston :: CityData jerusalem :: CityData lakeChamplain :: CityData lakeErie :: CityData lakeMead :: CityData lakeMichigan :: CityData lasVegas :: CityData london :: CityData losAngeles :: CityData melbourne :: CityData miami :: CityData montreal :: CityData nyc :: CityData ottawa :: CityData paris :: CityData philadelphia :: CityData richmond :: CityData rioDeJaneiro :: CityData riverside :: CityData sacramento :: CityData sanAntonio :: CityData sanDiego :: CityData sanFran :: CityData scotland :: CityData seattle :: CityData sendai :: CityData sydney :: CityData tampa :: CityData telAviv :: CityData tokyo :: CityData toronto :: CityData vaBeach :: CityData module Waldo.StoryExample loadScriptGen :: IO (PersonalData -> IO Script)