Weather 0.1.0.3 → 0.1.0.4
raw patch · 29 files changed
+1250/−3 lines, 29 filesbinary-added
Files
- Weather.cabal +1/−1
- Weather.cabal~ +1/−1
- dist/build/Net/Weather.dyn_hi binary
- dist/build/Net/Weather.dyn_o binary
- dist/build/Net/Weather.hi binary
- dist/build/Net/Weather.o binary
- dist/build/autogen/Paths_Weather.hs +35/−0
- dist/build/autogen/cabal_macros.h +114/−0
- dist/build/libHSWeather-0.1.0.3-ghc7.8.4.so binary
- dist/build/libHSWeather-0.1.0.3.a binary
- dist/doc/html/Weather-0.1.0.3-docs.tar.gz binary
- dist/doc/html/Weather-0.1.0.3-docs/Net-Weather.html +4/−0
- dist/doc/html/Weather-0.1.0.3-docs/Weather.haddock binary
- dist/doc/html/Weather-0.1.0.3-docs/doc-index.html +4/−0
- dist/doc/html/Weather-0.1.0.3-docs/frames.html +30/−0
- dist/doc/html/Weather-0.1.0.3-docs/haddock-util.js +344/−0
- dist/doc/html/Weather-0.1.0.3-docs/hslogo-16.png binary
- dist/doc/html/Weather-0.1.0.3-docs/mini_Net-Weather.html +4/−0
- dist/doc/html/Weather-0.1.0.3-docs/minus.gif binary
- dist/doc/html/Weather-0.1.0.3-docs/ocean.css +577/−0
- dist/doc/html/Weather-0.1.0.3-docs/plus.gif binary
- dist/doc/html/Weather-0.1.0.3-docs/src/Net-Weather.html +85/−0
- dist/doc/html/Weather-0.1.0.3-docs/src/hscolour.css +5/−0
- dist/doc/html/Weather-0.1.0.3-docs/synopsis.png binary
- dist/package.conf.inplace/Weather-0.1.0.3-inplace.conf +37/−0
- dist/package.conf.inplace/package.cache binary
- dist/setup-config binary
- src/Net/Weather.hs +2/−0
- src/Net/Weather.hs~ +7/−1
Weather.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: Weather-version: 0.1.0.3+version: 0.1.0.4 synopsis: Library for interacting with the Weather Underground JSON API. description: Weather is a simple library for interacting with the Weather Underground JSON API. It is not complete, but it may be useful still. homepage: https://github.com/bstamour/weather
Weather.cabal~ view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: Weather-version: 0.1.0.2+version: 0.1.0.3 synopsis: Library for interacting with the Weather Underground JSON API. description: Weather is a simple library for interacting with the Weather Underground JSON API. It is not complete, but it may be useful still. homepage: https://github.com/bstamour/weather
+ dist/build/Net/Weather.dyn_hi view
binary file changed (absent → 8785 bytes)
+ dist/build/Net/Weather.dyn_o view
binary file changed (absent → 57888 bytes)
+ dist/build/Net/Weather.hi view
binary file changed (absent → 8773 bytes)
+ dist/build/Net/Weather.o view
binary file changed (absent → 59632 bytes)
+ dist/build/autogen/Paths_Weather.hs view
@@ -0,0 +1,35 @@+module Paths_Weather (+ version,+ getBinDir, getLibDir, getDataDir, getLibexecDir,+ getDataFileName, getSysconfDir+ ) where++import qualified Control.Exception as Exception+import Data.Version (Version(..))+import System.Environment (getEnv)+import Prelude++catchIO :: IO a -> (Exception.IOException -> IO a) -> IO a+catchIO = Exception.catch++version :: Version+version = Version [0,1,0,3] []+bindir, libdir, datadir, libexecdir, sysconfdir :: FilePath++bindir = "/home/bryan/.cabal/bin"+libdir = "/home/bryan/.cabal/lib/x86_64-linux-ghc-7.8.4/Weather-0.1.0.3"+datadir = "/home/bryan/.cabal/share/x86_64-linux-ghc-7.8.4/Weather-0.1.0.3"+libexecdir = "/home/bryan/.cabal/libexec"+sysconfdir = "/home/bryan/.cabal/etc"++getBinDir, getLibDir, getDataDir, getLibexecDir, getSysconfDir :: IO FilePath+getBinDir = catchIO (getEnv "Weather_bindir") (\_ -> return bindir)+getLibDir = catchIO (getEnv "Weather_libdir") (\_ -> return libdir)+getDataDir = catchIO (getEnv "Weather_datadir") (\_ -> return datadir)+getLibexecDir = catchIO (getEnv "Weather_libexecdir") (\_ -> return libexecdir)+getSysconfDir = catchIO (getEnv "Weather_sysconfdir") (\_ -> return sysconfdir)++getDataFileName :: FilePath -> IO FilePath+getDataFileName name = do+ dir <- getDataDir+ return (dir ++ "/" ++ name)
+ dist/build/autogen/cabal_macros.h view
@@ -0,0 +1,114 @@+/* DO NOT EDIT: This file is automatically generated by Cabal */++/* package HTTP-4000.2.19 */+#define VERSION_HTTP "4000.2.19"+#define MIN_VERSION_HTTP(major1,major2,minor) (\+ (major1) < 4000 || \+ (major1) == 4000 && (major2) < 2 || \+ (major1) == 4000 && (major2) == 2 && (minor) <= 19)++/* package aeson-0.8.0.2 */+#define VERSION_aeson "0.8.0.2"+#define MIN_VERSION_aeson(major1,major2,minor) (\+ (major1) < 0 || \+ (major1) == 0 && (major2) < 8 || \+ (major1) == 0 && (major2) == 8 && (minor) <= 0)++/* package base-4.7.0.2 */+#define VERSION_base "4.7.0.2"+#define MIN_VERSION_base(major1,major2,minor) (\+ (major1) < 4 || \+ (major1) == 4 && (major2) < 7 || \+ (major1) == 4 && (major2) == 7 && (minor) <= 0)++/* package bytestring-0.10.4.0 */+#define VERSION_bytestring "0.10.4.0"+#define MIN_VERSION_bytestring(major1,major2,minor) (\+ (major1) < 0 || \+ (major1) == 0 && (major2) < 10 || \+ (major1) == 0 && (major2) == 10 && (minor) <= 4)++/* package text-1.2.0.3 */+#define VERSION_text "1.2.0.3"+#define MIN_VERSION_text(major1,major2,minor) (\+ (major1) < 1 || \+ (major1) == 1 && (major2) < 2 || \+ (major1) == 1 && (major2) == 2 && (minor) <= 0)++/* package unordered-containers-0.2.5.1 */+#define VERSION_unordered_containers "0.2.5.1"+#define MIN_VERSION_unordered_containers(major1,major2,minor) (\+ (major1) < 0 || \+ (major1) == 0 && (major2) < 2 || \+ (major1) == 0 && (major2) == 2 && (minor) <= 5)++/* tool alex-3.1.4 */+#define TOOL_VERSION_alex "3.1.4"+#define MIN_TOOL_VERSION_alex(major1,major2,minor) (\+ (major1) < 3 || \+ (major1) == 3 && (major2) < 1 || \+ (major1) == 3 && (major2) == 1 && (minor) <= 4)++/* tool gcc-4.8.4 */+#define TOOL_VERSION_gcc "4.8.4"+#define MIN_TOOL_VERSION_gcc(major1,major2,minor) (\+ (major1) < 4 || \+ (major1) == 4 && (major2) < 8 || \+ (major1) == 4 && (major2) == 8 && (minor) <= 4)++/* tool ghc-7.8.4 */+#define TOOL_VERSION_ghc "7.8.4"+#define MIN_TOOL_VERSION_ghc(major1,major2,minor) (\+ (major1) < 7 || \+ (major1) == 7 && (major2) < 8 || \+ (major1) == 7 && (major2) == 8 && (minor) <= 4)++/* tool ghc-pkg-7.8.4 */+#define TOOL_VERSION_ghc_pkg "7.8.4"+#define MIN_TOOL_VERSION_ghc_pkg(major1,major2,minor) (\+ (major1) < 7 || \+ (major1) == 7 && (major2) < 8 || \+ (major1) == 7 && (major2) == 8 && (minor) <= 4)++/* tool haddock-2.14.3 */+#define TOOL_VERSION_haddock "2.14.3"+#define MIN_TOOL_VERSION_haddock(major1,major2,minor) (\+ (major1) < 2 || \+ (major1) == 2 && (major2) < 14 || \+ (major1) == 2 && (major2) == 14 && (minor) <= 3)++/* tool happy-1.19.5 */+#define TOOL_VERSION_happy "1.19.5"+#define MIN_TOOL_VERSION_happy(major1,major2,minor) (\+ (major1) < 1 || \+ (major1) == 1 && (major2) < 19 || \+ (major1) == 1 && (major2) == 19 && (minor) <= 5)++/* tool hpc-0.67 */+#define TOOL_VERSION_hpc "0.67"+#define MIN_TOOL_VERSION_hpc(major1,major2,minor) (\+ (major1) < 0 || \+ (major1) == 0 && (major2) < 67 || \+ (major1) == 0 && (major2) == 67 && (minor) <= 0)++/* tool hsc2hs-0.67 */+#define TOOL_VERSION_hsc2hs "0.67"+#define MIN_TOOL_VERSION_hsc2hs(major1,major2,minor) (\+ (major1) < 0 || \+ (major1) == 0 && (major2) < 67 || \+ (major1) == 0 && (major2) == 67 && (minor) <= 0)++/* tool hscolour-1.22 */+#define TOOL_VERSION_hscolour "1.22"+#define MIN_TOOL_VERSION_hscolour(major1,major2,minor) (\+ (major1) < 1 || \+ (major1) == 1 && (major2) < 22 || \+ (major1) == 1 && (major2) == 22 && (minor) <= 0)++/* tool pkg-config-0.25 */+#define TOOL_VERSION_pkg_config "0.25"+#define MIN_TOOL_VERSION_pkg_config(major1,major2,minor) (\+ (major1) < 0 || \+ (major1) == 0 && (major2) < 25 || \+ (major1) == 0 && (major2) == 25 && (minor) <= 0)+
+ dist/build/libHSWeather-0.1.0.3-ghc7.8.4.so view
binary file changed (absent → 66950 bytes)
+ dist/build/libHSWeather-0.1.0.3.a view
binary file changed (absent → 55190 bytes)
+ dist/doc/html/Weather-0.1.0.3-docs.tar.gz view
binary file changed (absent → 24044 bytes)
+ dist/doc/html/Weather-0.1.0.3-docs/Net-Weather.html view
@@ -0,0 +1,4 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Net.Weather</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[+window.onload = function () {pageLoad();setSynopsis("mini_Net-Weather.html");};+//]]>+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Net-Weather.html">Source</a></li><li><a href="http://hackage.haskell.org/package/Weather">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">Weather-0.1.0.3: Library for interacting with the Weather Underground JSON API.</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Net.Weather</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span> <a href="#t:Observation">Observation</a> = <a href="#v:Observation">Observation</a> {<ul class="subs"><li><a href="#v:obsTime">obsTime</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></li><li><a href="#v:obsWeather">obsWeather</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></li><li><a href="#v:obsTemp">obsTemp</a> :: <a href="http://hackage.haskell.org/package/base/docs/Prelude.html#t:Float">Float</a></li><li><a href="#v:obsRelHumidity">obsRelHumidity</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></li><li><a href="#v:obsWind">obsWind</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></li><li><a href="#v:obsFeelsLike">obsFeelsLike</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:APIKey">APIKey</a> = <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:getConditions">getConditions</a> :: <a href="Net-Weather.html#t:APIKey">APIKey</a> -> City -> State -> <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Net-Weather.html#t:Observation">Observation</a>)</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Observation" class="def">Observation</a> <a href="src/Net-Weather.html#Observation" class="link">Source</a></p><div class="doc"><p>Observation data.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Observation" class="def">Observation</a></td><td class="doc empty"> </td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:obsTime" class="def">obsTime</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></dt><dd class="doc"><p>The time the observation was taken.</p></dd><dt class="src"><a name="v:obsWeather" class="def">obsWeather</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></dt><dd class="doc"><p>Description of the weather.</p></dd><dt class="src"><a name="v:obsTemp" class="def">obsTemp</a> :: <a href="http://hackage.haskell.org/package/base/docs/Prelude.html#t:Float">Float</a></dt><dd class="doc"><p>Temperature (F).</p></dd><dt class="src"><a name="v:obsRelHumidity" class="def">obsRelHumidity</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></dt><dd class="doc"><p>Relative humidity (%).</p></dd><dt class="src"><a name="v:obsWind" class="def">obsWind</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></dt><dd class="doc"><p>Wind condition.</p></dd><dt class="src"><a name="v:obsFeelsLike" class="def">obsFeelsLike</a> :: <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a></dt><dd class="doc"><p>What it feels like.</p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Observation" class="caption collapser" onclick="toggleSection('i:Observation')">Instances</p><div id="section.i:Observation" class="show"><table><tr><td class="src"><a href="http://hackage.haskell.org/package/base/docs/Text-Show.html#t:Show">Show</a> <a href="Net-Weather.html#t:Observation">Observation</a></td><td class="doc empty"> </td></tr><tr><td class="src">FromJSON <a href="Net-Weather.html#t:Observation">Observation</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:APIKey" class="def">APIKey</a> = <a href="http://hackage.haskell.org/package/base/docs/Data-String.html#t:String">String</a> <a href="src/Net-Weather.html#APIKey" class="link">Source</a></p><div class="doc"><p>API key. Obtain yours at http://wunderground.com.</p></div></div><div class="top"><p class="src"><a name="v:getConditions" class="def">getConditions</a> :: <a href="Net-Weather.html#t:APIKey">APIKey</a> -> City -> State -> <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Net-Weather.html#t:Observation">Observation</a>) <a href="src/Net-Weather.html#getConditions" class="link">Source</a></p><div class="doc"><p>Get the current weather conditions of a city.</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.14.3</p></div></body></html>
+ dist/doc/html/Weather-0.1.0.3-docs/Weather.haddock view
binary file changed (absent → 2295 bytes)
+ dist/doc/html/Weather-0.1.0.3-docs/doc-index.html view
@@ -0,0 +1,4 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Weather-0.1.0.3: Library for interacting with the Weather Underground JSON API. (Index)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[+window.onload = function () {pageLoad();};+//]]>+</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="http://hackage.haskell.org/package/Weather">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">Weather-0.1.0.3: Library for interacting with the Weather Underground JSON API.</p></div><div id="content"><div id="index"><p class="caption">Index</p><table><tr><td class="src">APIKey</td><td class="module"><a href="Net-Weather.html#t:APIKey">Net.Weather</a></td></tr><tr><td class="src">getConditions</td><td class="module"><a href="Net-Weather.html#v:getConditions">Net.Weather</a></td></tr><tr><td class="src">Observation</td><td> </td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Net-Weather.html#t:Observation">Net.Weather</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Net-Weather.html#v:Observation">Net.Weather</a></td></tr><tr><td class="src">obsFeelsLike</td><td class="module"><a href="Net-Weather.html#v:obsFeelsLike">Net.Weather</a></td></tr><tr><td class="src">obsRelHumidity</td><td class="module"><a href="Net-Weather.html#v:obsRelHumidity">Net.Weather</a></td></tr><tr><td class="src">obsTemp</td><td class="module"><a href="Net-Weather.html#v:obsTemp">Net.Weather</a></td></tr><tr><td class="src">obsTime</td><td class="module"><a href="Net-Weather.html#v:obsTime">Net.Weather</a></td></tr><tr><td class="src">obsWeather</td><td class="module"><a href="Net-Weather.html#v:obsWeather">Net.Weather</a></td></tr><tr><td class="src">obsWind</td><td class="module"><a href="Net-Weather.html#v:obsWind">Net.Weather</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.14.3</p></div></body></html>
+ dist/doc/html/Weather-0.1.0.3-docs/frames.html view
@@ -0,0 +1,30 @@+<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">+<html xmlns="http://www.w3.org/1999/xhtml">+<head>+<title></title>+<script src="haddock-util.js" type="text/javascript"></script>+<script type="text/javascript"><!--+/*++ The synopsis frame needs to be updated using javascript, so we hide+ it by default and only show it if javascript is enabled.++ TODO: provide some means to disable it.+*/+function load() {+ var d = document.getElementById("inner-fs");+ d.rows = "50%,50%";+ postReframe();+}+--></script>+</head>+<frameset id="outer-fs" cols="25%,75%" onload="load()">+ <frameset id="inner-fs" rows="100%,0%">+ <frame src="index-frames.html" name="modules" />+ <frame src="" name="synopsis" />+ </frameset>+ <frame src="index.html" name="main" />+</frameset>+</html>
+ dist/doc/html/Weather-0.1.0.3-docs/haddock-util.js view
@@ -0,0 +1,344 @@+// Haddock JavaScript utilities++var rspace = /\s\s+/g,+ rtrim = /^\s+|\s+$/g;++function spaced(s) { return (" " + s + " ").replace(rspace, " "); }+function trim(s) { return s.replace(rtrim, ""); }++function hasClass(elem, value) {+ var className = spaced(elem.className || "");+ return className.indexOf( " " + value + " " ) >= 0;+}++function addClass(elem, value) {+ var className = spaced(elem.className || "");+ if ( className.indexOf( " " + value + " " ) < 0 ) {+ elem.className = trim(className + " " + value);+ }+}++function removeClass(elem, value) {+ var className = spaced(elem.className || "");+ className = className.replace(" " + value + " ", " ");+ elem.className = trim(className);+}++function toggleClass(elem, valueOn, valueOff, bool) {+ if (bool == null) { bool = ! hasClass(elem, valueOn); }+ if (bool) {+ removeClass(elem, valueOff);+ addClass(elem, valueOn);+ }+ else {+ removeClass(elem, valueOn);+ addClass(elem, valueOff);+ }+ return bool;+}+++function makeClassToggle(valueOn, valueOff)+{+ return function(elem, bool) {+ return toggleClass(elem, valueOn, valueOff, bool);+ }+}++toggleShow = makeClassToggle("show", "hide");+toggleCollapser = makeClassToggle("collapser", "expander");++function toggleSection(id)+{+ var b = toggleShow(document.getElementById("section." + id));+ toggleCollapser(document.getElementById("control." + id), b);+ rememberCollapsed(id, b);+ return b;+}++var collapsed = {};+function rememberCollapsed(id, b)+{+ if(b)+ delete collapsed[id]+ else+ collapsed[id] = null;++ var sections = [];+ for(var i in collapsed)+ {+ if(collapsed.hasOwnProperty(i))+ sections.push(i);+ }+ // cookie specific to this page; don't use setCookie which sets path=/+ document.cookie = "collapsed=" + escape(sections.join('+'));+}++function restoreCollapsed()+{+ var cookie = getCookie("collapsed");+ if(!cookie)+ return;++ var ids = cookie.split('+');+ for(var i in ids)+ {+ if(document.getElementById("section." + ids[i]))+ toggleSection(ids[i]);+ }+}++function setCookie(name, value) {+ document.cookie = name + "=" + escape(value) + ";path=/;";+}++function clearCookie(name) {+ document.cookie = name + "=;path=/;expires=Thu, 01-Jan-1970 00:00:01 GMT;";+}++function getCookie(name) {+ var nameEQ = name + "=";+ var ca = document.cookie.split(';');+ for(var i=0;i < ca.length;i++) {+ var c = ca[i];+ while (c.charAt(0)==' ') c = c.substring(1,c.length);+ if (c.indexOf(nameEQ) == 0) {+ return unescape(c.substring(nameEQ.length,c.length));+ }+ }+ return null;+}++++var max_results = 75; // 50 is not enough to search for map in the base libraries+var shown_range = null;+var last_search = null;++function quick_search()+{+ perform_search(false);+}++function full_search()+{+ perform_search(true);+}+++function perform_search(full)+{+ var text = document.getElementById("searchbox").value.toLowerCase();+ if (text == last_search && !full) return;+ last_search = text;+ + var table = document.getElementById("indexlist");+ var status = document.getElementById("searchmsg");+ var children = table.firstChild.childNodes;+ + // first figure out the first node with the prefix+ var first = bisect(-1);+ var last = (first == -1 ? -1 : bisect(1));++ if (first == -1)+ {+ table.className = "";+ status.innerHTML = "No results found, displaying all";+ }+ else if (first == 0 && last == children.length - 1)+ {+ table.className = "";+ status.innerHTML = "";+ }+ else if (last - first >= max_results && !full)+ {+ table.className = "";+ status.innerHTML = "More than " + max_results + ", press Search to display";+ }+ else+ {+ // decide what you need to clear/show+ if (shown_range)+ setclass(shown_range[0], shown_range[1], "indexrow");+ setclass(first, last, "indexshow");+ shown_range = [first, last];+ table.className = "indexsearch";+ status.innerHTML = "";+ }++ + function setclass(first, last, status)+ {+ for (var i = first; i <= last; i++)+ {+ children[i].className = status;+ }+ }+ + + // do a binary search, treating 0 as ...+ // return either -1 (no 0's found) or location of most far match+ function bisect(dir)+ {+ var first = 0, finish = children.length - 1;+ var mid, success = false;++ while (finish - first > 3)+ {+ mid = Math.floor((finish + first) / 2);++ var i = checkitem(mid);+ if (i == 0) i = dir;+ if (i == -1)+ finish = mid;+ else+ first = mid;+ }+ var a = (dir == 1 ? first : finish);+ var b = (dir == 1 ? finish : first);+ for (var i = b; i != a - dir; i -= dir)+ {+ if (checkitem(i) == 0) return i;+ }+ return -1;+ } + + + // from an index, decide what the result is+ // 0 = match, -1 is lower, 1 is higher+ function checkitem(i)+ {+ var s = getitem(i).toLowerCase().substr(0, text.length);+ if (s == text) return 0;+ else return (s > text ? -1 : 1);+ }+ + + // from an index, get its string+ // this abstracts over alternates+ function getitem(i)+ {+ for ( ; i >= 0; i--)+ {+ var s = children[i].firstChild.firstChild.data;+ if (s.indexOf(' ') == -1)+ return s;+ }+ return ""; // should never be reached+ }+}++function setSynopsis(filename) {+ if (parent.window.synopsis) {+ if (parent.window.synopsis.location.replace) {+ // In Firefox this avoids adding the change to the history.+ parent.window.synopsis.location.replace(filename);+ } else {+ parent.window.synopsis.location = filename;+ }+ }+}++function addMenuItem(html) {+ var menu = document.getElementById("page-menu");+ if (menu) {+ var btn = menu.firstChild.cloneNode(false);+ btn.innerHTML = html;+ menu.appendChild(btn);+ }+}++function adjustForFrames() {+ var bodyCls;+ + if (parent.location.href == window.location.href) {+ // not in frames, so add Frames button+ addMenuItem("<a href='#' onclick='reframe();return true;'>Frames</a>");+ bodyCls = "no-frame";+ }+ else {+ bodyCls = "in-frame";+ }+ addClass(document.body, bodyCls);+}++function reframe() {+ setCookie("haddock-reframe", document.URL);+ window.location = "frames.html";+}++function postReframe() {+ var s = getCookie("haddock-reframe");+ if (s) {+ parent.window.main.location = s;+ clearCookie("haddock-reframe");+ }+}++function styles() {+ var i, a, es = document.getElementsByTagName("link"), rs = [];+ for (i = 0; a = es[i]; i++) {+ if(a.rel.indexOf("style") != -1 && a.title) {+ rs.push(a);+ }+ }+ return rs;+}++function addStyleMenu() {+ var as = styles();+ var i, a, btns = "";+ for(i=0; a = as[i]; i++) {+ btns += "<li><a href='#' onclick=\"setActiveStyleSheet('"+ + a.title + "'); return false;\">"+ + a.title + "</a></li>"+ }+ if (as.length > 1) {+ var h = "<div id='style-menu-holder'>"+ + "<a href='#' onclick='styleMenu(); return false;'>Style ▾</a>"+ + "<ul id='style-menu' class='hide'>" + btns + "</ul>"+ + "</div>";+ addMenuItem(h);+ }+}++function setActiveStyleSheet(title) {+ var as = styles();+ var i, a, found;+ for(i=0; a = as[i]; i++) {+ a.disabled = true;+ // need to do this always, some browsers are edge triggered+ if(a.title == title) {+ found = a;+ }+ }+ if (found) {+ found.disabled = false;+ setCookie("haddock-style", title);+ }+ else {+ as[0].disabled = false;+ clearCookie("haddock-style");+ }+ styleMenu(false);+}++function resetStyle() {+ var s = getCookie("haddock-style");+ if (s) setActiveStyleSheet(s);+}+++function styleMenu(show) {+ var m = document.getElementById('style-menu');+ if (m) toggleShow(m, show);+}+++function pageLoad() {+ addStyleMenu();+ adjustForFrames();+ resetStyle();+ restoreCollapsed();+}+
+ dist/doc/html/Weather-0.1.0.3-docs/hslogo-16.png view
binary file changed (absent → 1684 bytes)
+ dist/doc/html/Weather-0.1.0.3-docs/mini_Net-Weather.html view
@@ -0,0 +1,4 @@+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Net.Weather</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[+window.onload = function () {pageLoad();};+//]]>+</script></head><body id="mini"><div id="module-header"><p class="caption">Net.Weather</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Net-Weather.html#t:Observation" target="main">Observation</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Net-Weather.html#t:APIKey" target="main">APIKey</a></p></div><div class="top"><p class="src"><a href="Net-Weather.html#v:getConditions" target="main">getConditions</a></p></div></div></body></html>
+ dist/doc/html/Weather-0.1.0.3-docs/minus.gif view
binary file changed (absent → 56 bytes)
+ dist/doc/html/Weather-0.1.0.3-docs/ocean.css view
@@ -0,0 +1,577 @@+/* @group Fundamentals */++* { margin: 0; padding: 0 }++/* Is this portable? */+html {+ background-color: white;+ width: 100%;+ height: 100%;+}++body {+ background: white;+ color: black;+ text-align: left;+ min-height: 100%;+ position: relative;+}++p {+ margin: 0.8em 0;+}++ul, ol {+ margin: 0.8em 0 0.8em 2em;+}++dl {+ margin: 0.8em 0;+}++dt {+ font-weight: bold;+}+dd {+ margin-left: 2em;+}++a { text-decoration: none; }+a[href]:link { color: rgb(196,69,29); }+a[href]:visited { color: rgb(171,105,84); }+a[href]:hover { text-decoration:underline; }++/* @end */++/* @group Fonts & Sizes */++/* Basic technique & IE workarounds from YUI 3+ For reasons, see:+ http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css+ */++body {+ font:13px/1.4 sans-serif;+ *font-size:small; /* for IE */+ *font:x-small; /* for IE in quirks mode */+}++h1 { font-size: 146.5%; /* 19pt */ }+h2 { font-size: 131%; /* 17pt */ }+h3 { font-size: 116%; /* 15pt */ }+h4 { font-size: 100%; /* 13pt */ }+h5 { font-size: 100%; /* 13pt */ }++select, input, button, textarea {+ font:99% sans-serif;+}++table {+ font-size:inherit;+ font:100%;+}++pre, code, kbd, samp, tt, .src {+ font-family:monospace;+ *font-size:108%;+ line-height: 124%;+}++.links, .link {+ font-size: 85%; /* 11pt */+}++#module-header .caption {+ font-size: 182%; /* 24pt */+}++.info {+ font-size: 85%; /* 11pt */+}++#table-of-contents, #synopsis {+ /* font-size: 85%; /* 11pt */+}+++/* @end */++/* @group Common */++.caption, h1, h2, h3, h4, h5, h6 {+ font-weight: bold;+ color: rgb(78,98,114);+ margin: 0.8em 0 0.4em;+}++* + h1, * + h2, * + h3, * + h4, * + h5, * + h6 {+ margin-top: 2em;+}++h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 {+ margin-top: inherit;+}++ul.links {+ list-style: none;+ text-align: left;+ float: right;+ display: inline-table;+ margin: 0 0 0 1em;+}++ul.links li {+ display: inline;+ border-left: 1px solid #d5d5d5;+ white-space: nowrap;+ padding: 0;+}++ul.links li a {+ padding: 0.2em 0.5em;+}++.hide { display: none; }+.show { display: inherit; }+.clear { clear: both; }++.collapser {+ background-image: url(minus.gif);+ background-repeat: no-repeat;+}+.expander {+ background-image: url(plus.gif);+ background-repeat: no-repeat;+}+p.caption.collapser,+p.caption.expander {+ background-position: 0 0.4em;+}+.collapser, .expander {+ padding-left: 14px;+ margin-left: -14px;+ cursor: pointer;+}++pre {+ padding: 0.25em;+ margin: 0.8em 0;+ background: rgb(229,237,244);+ overflow: auto;+ border-bottom: 0.25em solid white;+ /* white border adds some space below the box to compensate+ for visual extra space that paragraphs have between baseline+ and the bounding box */+}++.src {+ background: #f0f0f0;+ padding: 0.2em 0.5em;+}++.keyword { font-weight: normal; }+.def { font-weight: bold; }+++/* @end */++/* @group Page Structure */++#content {+ margin: 0 auto;+ padding: 0 2em 6em;+}++#package-header {+ background: rgb(41,56,69);+ border-top: 5px solid rgb(78,98,114);+ color: #ddd;+ padding: 0.2em;+ position: relative;+ text-align: left;+}++#package-header .caption {+ background: url(hslogo-16.png) no-repeat 0em;+ color: white;+ margin: 0 2em;+ font-weight: normal;+ font-style: normal;+ padding-left: 2em;+}++#package-header a:link, #package-header a:visited { color: white; }+#package-header a:hover { background: rgb(78,98,114); }++#module-header .caption {+ color: rgb(78,98,114);+ font-weight: bold;+ border-bottom: 1px solid #ddd;+}++table.info {+ float: right;+ padding: 0.5em 1em;+ border: 1px solid #ddd;+ color: rgb(78,98,114);+ background-color: #fff;+ max-width: 40%;+ border-spacing: 0;+ position: relative;+ top: -0.5em;+ margin: 0 0 0 2em;+}++.info th {+ padding: 0 1em 0 0;+}++div#style-menu-holder {+ position: relative;+ z-index: 2;+ display: inline;+}++#style-menu {+ position: absolute;+ z-index: 1;+ overflow: visible;+ background: #374c5e;+ margin: 0;+ text-align: center;+ right: 0;+ padding: 0;+ top: 1.25em;+}++#style-menu li {+ display: list-item;+ border-style: none;+ margin: 0;+ padding: 0;+ color: #000;+ list-style-type: none;+}++#style-menu li + li {+ border-top: 1px solid #919191;+}++#style-menu a {+ width: 6em;+ padding: 3px;+ display: block;+}++#footer {+ background: #ddd;+ border-top: 1px solid #aaa;+ padding: 0.5em 0;+ color: #666;+ text-align: center;+ position: absolute;+ bottom: 0;+ width: 100%;+ height: 3em;+}++/* @end */++/* @group Front Matter */++#table-of-contents {+ float: right;+ clear: right;+ background: #faf9dc;+ border: 1px solid #d8d7ad;+ padding: 0.5em 1em;+ max-width: 20em;+ margin: 0.5em 0 1em 1em;+}++#table-of-contents .caption {+ text-align: center;+ margin: 0;+}++#table-of-contents ul {+ list-style: none;+ margin: 0;+}++#table-of-contents ul ul {+ margin-left: 2em;+}++#description .caption {+ display: none;+}++#synopsis {+ display: none;+}++.no-frame #synopsis {+ display: block;+ position: fixed;+ right: 0;+ height: 80%;+ top: 10%;+ padding: 0;+}++#synopsis .caption {+ float: left;+ width: 29px;+ color: rgba(255,255,255,0);+ height: 110px;+ margin: 0;+ font-size: 1px;+ padding: 0;+}++#synopsis p.caption.collapser {+ background: url(synopsis.png) no-repeat -64px -8px;+}++#synopsis p.caption.expander {+ background: url(synopsis.png) no-repeat 0px -8px;+}++#synopsis ul {+ height: 100%;+ overflow: auto;+ padding: 0.5em;+ margin: 0;+}++#synopsis ul ul {+ overflow: hidden;+}++#synopsis ul,+#synopsis ul li.src {+ background-color: #faf9dc;+ white-space: nowrap;+ list-style: none;+ margin-left: 0;+}++/* @end */++/* @group Main Content */++#interface div.top { margin: 2em 0; }+#interface h1 + div.top,+#interface h2 + div.top,+#interface h3 + div.top,+#interface h4 + div.top,+#interface h5 + div.top {+ margin-top: 1em;+}+#interface p.src .link {+ float: right;+ color: #919191;+ border-left: 1px solid #919191;+ background: #f0f0f0;+ padding: 0 0.5em 0.2em;+ margin: 0 -0.5em 0 0.5em;+}++#interface span.fixity {+ color: #919191;+ border-left: 1px solid #919191;+ padding: 0.2em 0.5em 0.2em 0.5em;+ margin: 0 -1em 0 1em;+}++#interface span.rightedge {+ border-left: 1px solid #919191;+ padding: 0.2em 0 0.2em 0;+ margin: 0 0 0 1em;+}++#interface table { border-spacing: 2px; }+#interface td {+ vertical-align: top;+ padding-left: 0.5em;+}+#interface td.src {+ white-space: nowrap;+}+#interface td.doc p {+ margin: 0;+}+#interface td.doc p + p {+ margin-top: 0.8em;+}++.subs dl {+ margin: 0;+}++.subs dt {+ float: left;+ clear: left;+ display: block;+ margin: 1px 0;+}++.subs dd {+ float: right;+ width: 90%;+ display: block;+ padding-left: 0.5em;+ margin-bottom: 0.5em;+}++.subs dd.empty {+ display: none;+}++.subs dd p {+ margin: 0;+}++/* Render short-style data instances */+.inst ul {+ height: 100%;+ padding: 0.5em;+ margin: 0;+}++.inst, .inst li {+ list-style: none;+ margin-left: 1em;+}++.top p.src {+ border-top: 1px solid #ccc;+}++.subs, .doc {+ /* use this selector for one level of indent */+ padding-left: 2em;+}++.warning {+ color: red;+}++.arguments {+ margin-top: -0.4em;+}+.arguments .caption {+ display: none;+}++.fields { padding-left: 1em; }++.fields .caption { display: none; }++.fields p { margin: 0 0; }++/* this seems bulky to me+.methods, .constructors {+ background: #f8f8f8;+ border: 1px solid #eee;+}+*/++/* @end */++/* @group Auxillary Pages */+++.extension-list {+ list-style-type: none;+ margin-left: 0;+}++#mini {+ margin: 0 auto;+ padding: 0 1em 1em;+}++#mini > * {+ font-size: 93%; /* 12pt */+}++#mini #module-list .caption,+#mini #module-header .caption {+ font-size: 125%; /* 15pt */+}++#mini #interface h1,+#mini #interface h2,+#mini #interface h3,+#mini #interface h4 {+ font-size: 109%; /* 13pt */+ margin: 1em 0 0;+}++#mini #interface .top,+#mini #interface .src {+ margin: 0;+}++#mini #module-list ul {+ list-style: none;+ margin: 0;+}++#alphabet ul {+ list-style: none;+ padding: 0;+ margin: 0.5em 0 0;+ text-align: center;+}++#alphabet li {+ display: inline;+ margin: 0 0.25em;+}++#alphabet a {+ font-weight: bold;+}++#index .caption,+#module-list .caption { font-size: 131%; /* 17pt */ }++#index table {+ margin-left: 2em;+}++#index .src {+ font-weight: bold;+}+#index .alt {+ font-size: 77%; /* 10pt */+ font-style: italic;+ padding-left: 2em;+}++#index td + td {+ padding-left: 1em;+}++#module-list ul {+ list-style: none;+ margin: 0 0 0 2em;+}++#module-list li {+ clear: right;+}++#module-list span.collapser,+#module-list span.expander {+ background-position: 0 0.3em;+}++#module-list .package {+ float: right;+}++/* @end */
+ dist/doc/html/Weather-0.1.0.3-docs/plus.gif view
binary file changed (absent → 59 bytes)
+ dist/doc/html/Weather-0.1.0.3-docs/src/Net-Weather.html view
@@ -0,0 +1,85 @@+<?xml version="1.0" encoding="UTF-8"?>+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">+<html>+<head>+<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->+<title>src/Net/Weather.hs</title>+<link type='text/css' rel='stylesheet' href='hscolour.css' />+</head>+<body>+<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE OverloadedStrings #-}</span>+<a name="line-2"></a>+<a name="line-3"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Net</span><span class='hs-varop'>.</span><span class='hs-conid'>Weather</span>+<a name="line-4"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>Observation</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>+<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>APIKey</span>+<a name="line-6"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>getConditions</span>+<a name="line-7"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>+<a name="line-8"></a>+<a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span>+<a name="line-10"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span>+<a name="line-11"></a>+<a name="line-12"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>+<a name="line-13"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Aeson</span>+<a name="line-14"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span><span class='hs-varop'>.</span><span class='hs-conid'>Char8</span> <span class='hs-layout'>(</span><span class='hs-varid'>pack</span><span class='hs-layout'>)</span>+<a name="line-15"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>HTTP</span> <span class='hs-layout'>(</span><span class='hs-varid'>getResponseBody</span><span class='hs-layout'>,</span> <span class='hs-varid'>simpleHTTP</span><span class='hs-layout'>,</span> <span class='hs-varid'>getRequest</span><span class='hs-layout'>)</span>+<a name="line-16"></a>+<a name="line-17"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>HashMap</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>H</span>+<a name="line-18"></a>+<a name="line-19"></a><a name="Observation"></a><span class='hs-comment'>-- | Observation data.</span>+<a name="line-20"></a><a name="Observation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Observation</span> <span class='hs-keyglyph'>=</span>+<a name="line-21"></a> <span class='hs-conid'>Observation</span> <span class='hs-layout'>{</span> <span class='hs-varid'>obsTime</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ The time the observation was taken.</span>+<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>obsWeather</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Description of the weather.</span>+<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>obsTemp</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Float</span> <span class='hs-comment'>-- ^ Temperature (F).</span>+<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>obsRelHumidity</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Relative humidity (%).</span>+<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>obsWind</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Wind condition.</span>+<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>obsFeelsLike</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ What it feels like.</span>+<a name="line-27"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>)</span>+<a name="line-28"></a>+<a name="line-29"></a><a name="instance%20FromJSON%20Observation"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromJSON</span> <span class='hs-conid'>Observation</span> <span class='hs-keyword'>where</span>+<a name="line-30"></a> <span class='hs-varid'>parseJSON</span> <span class='hs-layout'>(</span><span class='hs-conid'>Object</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Observation</span>+<a name="line-31"></a> <span class='hs-varop'><$></span> <span class='hs-varid'>v</span> <span class='hs-varop'>.:</span> <span class='hs-str'>"observation_time"</span>+<a name="line-32"></a> <span class='hs-varop'><*></span> <span class='hs-varid'>v</span> <span class='hs-varop'>.:</span> <span class='hs-str'>"weather"</span>+<a name="line-33"></a> <span class='hs-varop'><*></span> <span class='hs-varid'>v</span> <span class='hs-varop'>.:</span> <span class='hs-str'>"temp_f"</span>+<a name="line-34"></a> <span class='hs-varop'><*></span> <span class='hs-varid'>v</span> <span class='hs-varop'>.:</span> <span class='hs-str'>"relative_humidity"</span>+<a name="line-35"></a> <span class='hs-varop'><*></span> <span class='hs-varid'>v</span> <span class='hs-varop'>.:</span> <span class='hs-str'>"wind_string"</span>+<a name="line-36"></a> <span class='hs-varop'><*></span> <span class='hs-varid'>v</span> <span class='hs-varop'>.:</span> <span class='hs-str'>"feelslike_string"</span>+<a name="line-37"></a> <span class='hs-varid'>parseJSON</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mzero</span>+<a name="line-38"></a>+<a name="line-39"></a><a name="APIKey"></a><span class='hs-comment'>-- | API key. Obtain yours at <a href="http://wunderground.com.">http://wunderground.com.</a></span>+<a name="line-40"></a><a name="APIKey"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>APIKey</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span>+<a name="line-41"></a>+<a name="line-42"></a><a name="City"></a><span class='hs-comment'>-- | City name (e.g. Detroit).</span>+<a name="line-43"></a><a name="City"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>City</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span>+<a name="line-44"></a>+<a name="line-45"></a><a name="State"></a><span class='hs-comment'>-- | State abbreviation (e.g. MI for Michigan).</span>+<a name="line-46"></a><a name="State"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>State</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>String</span>+<a name="line-47"></a>+<a name="line-48"></a><a name="getConditions"></a><span class='hs-comment'>-- | Get the current weather conditions of a city.</span>+<a name="line-49"></a><span class='hs-definition'>getConditions</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>APIKey</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>City</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>State</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Observation</span><span class='hs-layout'>)</span>+<a name="line-50"></a><span class='hs-definition'>getConditions</span> <span class='hs-varid'>key</span> <span class='hs-varid'>city</span> <span class='hs-varid'>state</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>+<a name="line-51"></a> <span class='hs-varid'>obj</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>evalJSONRequest</span> <span class='hs-varop'>$</span> <span class='hs-varid'>conditionsQuery</span> <span class='hs-varid'>key</span> <span class='hs-varid'>city</span> <span class='hs-varid'>state</span>+<a name="line-52"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-varid'>obj</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>getProperty</span> <span class='hs-str'>"current_observation"</span>+<a name="line-53"></a>+<a name="line-54"></a><a name="getProperty"></a><span class='hs-comment'>-- Fetch a property from a JSON object.</span>+<a name="line-55"></a><span class='hs-definition'>getProperty</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FromJSON</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Value</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span>+<a name="line-56"></a><span class='hs-definition'>getProperty</span> <span class='hs-varid'>property</span> <span class='hs-layout'>(</span><span class='hs-conid'>Object</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>+<a name="line-57"></a> <span class='hs-varid'>val</span> <span class='hs-keyglyph'><-</span> <span class='hs-conid'>H</span><span class='hs-varop'>.</span><span class='hs-varid'>lookup</span> <span class='hs-varid'>property</span> <span class='hs-varid'>v</span>+<a name="line-58"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>fromJSON</span> <span class='hs-varid'>val</span> <span class='hs-keyword'>of</span>+<a name="line-59"></a> <span class='hs-conid'>Error</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Nothing</span>+<a name="line-60"></a> <span class='hs-conid'>Success</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Just</span> <span class='hs-varid'>x</span>+<a name="line-61"></a><span class='hs-definition'>getProperty</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>+<a name="line-62"></a>+<a name="line-63"></a><a name="evalJSONRequest"></a><span class='hs-comment'>-- Evaluate a JSON request and return the parsed object.</span>+<a name="line-64"></a><span class='hs-definition'>evalJSONRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FromJSON</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>+<a name="line-65"></a><span class='hs-definition'>evalJSONRequest</span> <span class='hs-varid'>request</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>+<a name="line-66"></a> <span class='hs-varid'>body</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getResponseBody</span> <span class='hs-varop'><=<</span> <span class='hs-varid'>simpleHTTP</span> <span class='hs-varop'>$</span> <span class='hs-varid'>getRequest</span> <span class='hs-varid'>request</span>+<a name="line-67"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-varid'>decode</span> <span class='hs-varop'>$</span> <span class='hs-varid'>pack</span> <span class='hs-varid'>body</span>+<a name="line-68"></a>+<a name="line-69"></a><a name="conditionsQuery"></a><span class='hs-comment'>-- The query used to get weather conditions.</span>+<a name="line-70"></a><span class='hs-definition'>conditionsQuery</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>+<a name="line-71"></a><span class='hs-definition'>conditionsQuery</span> <span class='hs-varid'>key</span> <span class='hs-varid'>city</span> <span class='hs-varid'>state</span> <span class='hs-keyglyph'>=</span>+<a name="line-72"></a> <span class='hs-str'>"http://api.wunderground.com/api/"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>key</span>+<a name="line-73"></a> <span class='hs-varop'>++</span> <span class='hs-str'>"/conditions/q/"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>state</span>+<a name="line-74"></a> <span class='hs-varop'>++</span> <span class='hs-str'>"/"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>city</span> <span class='hs-varop'>++</span> <span class='hs-str'>".json"</span>+</pre></body>+</html>
+ dist/doc/html/Weather-0.1.0.3-docs/src/hscolour.css view
@@ -0,0 +1,5 @@+.hs-keyglyph, .hs-layout {color: red;}+.hs-keyword {color: blue;}+.hs-comment, .hs-comment a {color: green;}+.hs-str, .hs-chr {color: teal;}+.hs-keyword, .hs-conid, .hs-varid, .hs-conop, .hs-varop, .hs-num, .hs-cpp, .hs-sel, .hs-definition {}
+ dist/doc/html/Weather-0.1.0.3-docs/synopsis.png view
binary file changed (absent → 11327 bytes)
+ dist/package.conf.inplace/Weather-0.1.0.3-inplace.conf view
@@ -0,0 +1,37 @@+name: Weather+version: 0.1.0.3+id: Weather-0.1.0.3-inplace+license: BSD3+copyright:+maintainer: bryan@bryanstamour.com+stability:+homepage: https://github.com/bstamour/weather+package-url:+synopsis: Library for interacting with the Weather Underground JSON API.+description: Weather is a simple library for interacting with the Weather Underground JSON API. It is not complete, but it may be useful still.+category: Net+author: Bryan St. Amour+exposed: True+exposed-modules: Net.Weather+hidden-modules:+trusted: False+import-dirs: /home/bryan/Projects/hackage/Weather-0.1.0.3/dist/build+library-dirs: /home/bryan/Projects/hackage/Weather-0.1.0.3/dist/build+hs-libraries: HSWeather-0.1.0.3+extra-libraries:+extra-ghci-libraries:+include-dirs:+includes:+depends: HTTP-4000.2.19-67a9c76f8cd1a3981b6cc909e538976a+ aeson-0.8.0.2-f40787507da1e389907178b93e23543b+ base-4.7.0.2-bfd89587617e381ae01b8dd7b6c7f1c1+ bytestring-0.10.4.0-d6f1d17d717e8652498cab8269a0acd5+ text-1.2.0.3-6e21f193e8407e4f9297ae6f12fe278d+ unordered-containers-0.2.5.1-66bb7a2f738510e6a8d4a2db141a08ef+hugs-options:+cc-options:+ld-options:+framework-dirs:+frameworks:+haddock-interfaces: /home/bryan/Projects/hackage/Weather-0.1.0.3/dist/doc/html/Weather/Weather.haddock+haddock-html: /home/bryan/Projects/hackage/Weather-0.1.0.3/dist/doc/html/Weather
+ dist/package.conf.inplace/package.cache view
binary file changed (absent → 1258 bytes)
+ dist/setup-config view
binary file changed (absent → 181219 bytes)
src/Net/Weather.hs view
@@ -3,6 +3,8 @@ module Net.Weather ( Observation(..) , APIKey+ , City+ , State , getConditions ) where
src/Net/Weather.hs~ view
@@ -39,8 +39,14 @@ -- | API key. Obtain yours at http://wunderground.com. type APIKey = String +-- | City name (e.g. Detroit).+type City = String++-- | State abbreviation (e.g. MI for Michigan).+type State = String+ -- | Get the current weather conditions of a city.-getConditions :: APIKey -> String -> String -> IO (Maybe Observation)+getConditions :: APIKey -> City -> State -> IO (Maybe Observation) getConditions key city state = do obj <- evalJSONRequest $ conditionsQuery key city state return $ obj >>= getProperty "current_observation"