]> gitweb @ CieloNegro.org - Lucu.git/commitdiff
docs
authorPHO <pho@cielonegro.org>
Tue, 29 Nov 2011 14:52:38 +0000 (23:52 +0900)
committerPHO <pho@cielonegro.org>
Tue, 29 Nov 2011 14:52:38 +0000 (23:52 +0900)
Ditz-issue: e0312227f40a0fa92d4c5d69a64dad473f54389a

Data/Collections/Newtype/TH.hs
Lucu.cabal
Network/HTTP/Lucu/Httpd.hs
examples/HelloWorld.hs
examples/Implanted.hs
examples/ImplantedSmall.hs
examples/Multipart.hs
examples/SSL.hs

index c60ea2b9b823311c05a1b9fa6faf4e5b365055a5..0301fd37562222cc896bc9246dc20c0c423d1bba 100644 (file)
@@ -2,7 +2,9 @@
     TemplateHaskell
   , UnicodeSyntax
   #-}
--- |FIXME: doc
+-- |Doesn't anyone know why these instances can't be derived using
+-- GeneralizedNewtypeDeriving? I think its limitation isn't reasonable
+-- at all...
 module Data.Collections.Newtype.TH
     ( derive
     )
@@ -27,7 +29,42 @@ import Prelude.Unicode
 
 type Deriver = Q Cxt → Q Type → Q Exp → Q Exp → Q Dec
 
--- |FIXME: doc
+-- |Automatic newtype instance deriver for type classes defined by the
+-- collections-api package.
+--
+-- @
+--   {-\# LANGUAGE TemplateHaskell \#-}
+--   module Foo (T) where
+--   import "Data.Collections"
+--   import "Data.Collections.BaseInstances" ()
+--   import qualified Data.Collections.Newtype.TH as C
+--   import qualified "Data.Map" as M
+--
+--   newtype T = T (M.Map 'Int' 'Bool')
+--
+--   C.derive [d| instance 'Unfoldable' T ('Int', 'Bool')
+--                instance 'Foldable'   T ('Int', 'Bool')
+--                instance 'Indexed'    T  'Int'  'Bool'
+--                ...
+--              |]
+-- @
+--
+-- This function can derive the following instances:
+--
+--   * 'Unfoldable'
+--
+--   * 'Foldable'
+--
+--   * 'Collection'
+--
+--   * 'Indexed'
+--
+--   * 'Map'
+--
+--   * 'Set'
+--
+--   * 'SortingCollection'
+--
 derive ∷ Q [Dec] → Q [Dec]
 derive = (concat <$>) ∘ (mapM go =≪)
     where
index 8703d046dfa44c41b563d89a320fe50629990825..7773f802ae8cced1624e872ccaff615405315528 100644 (file)
@@ -83,6 +83,7 @@ Library
             -DHAVE_SSL
 
     Exposed-Modules:
+        Data.Collections.Newtype.TH
         Network.HTTP.Lucu
         Network.HTTP.Lucu.Abortion
         Network.HTTP.Lucu.Authentication
@@ -113,7 +114,6 @@ Library
         Network.HTTP.Lucu.Utils
 
     Other-Modules:
-        Data.Collections.Newtype.TH
         Network.HTTP.Lucu.Abortion.Internal
         Network.HTTP.Lucu.Chunk
         Network.HTTP.Lucu.ContentCoding
index ac1dc77a66379508ac8f1bf2c0528c1f2ddd037a..0d78f986f314f21573aea96c7ff05304c3cea8ba 100644 (file)
@@ -28,26 +28,28 @@ import Prelude.Unicode
 --
 -- Example:
 --
--- > {-# LANGUAGE OverloadedStrings #-}
--- > {-# LANGUAGE QuasiQuotes #-}
--- > module Main where
--- > import Network
--- > import Network.HTTP.Lucu
--- > 
--- > main :: IO ()
--- > main = let config    = defaultConfig
--- >            resources = mkResTree [ ([], helloWorld) ]
--- >        in
--- >          withSocketsDo $ runHttpd config resourcees []
--- >
--- > helloWorld :: Resource
--- > helloWorld = emptyResource {
--- >                resGet
--- >                  = Just $ do setContentType [mimeType| text/plain |]
--- >                              putChunk "Hello, world!"
--- >              }
+-- @
+--   {-\# LANGUAGE OverloadedStrings \#-}
+--   {-\# LANGUAGE QuasiQuotes \#-}
+--   module Main where
+--   import qualified "Data.Collections" as C
+--   import "Network"
+--   import "Network.HTTP.Lucu"
 --
--- FIXME: update the above example
+--   main :: 'IO' ()
+--   main = let config = 'defaultConfig'
+--              tree   :: 'ResourceTree'
+--              tree   = C.fromList [ ([], 'nonGreedy' helloWorld) ]
+--          in
+--            'Network.withSocketsDo' '$' 'runHttpd' config '$' 'resourceMap' tree
+--
+--   helloWorld :: 'Network.HTTP.Lucu.Resource'
+--   helloWorld = C.fromList
+--                [ ( 'Network.HTTP.Lucu.GET'
+--                  , do 'Network.HTTP.Lucu.setContentType' ['Network.HTTP.Lucu.mimeType'| text/plain |]
+--                       'Network.HTTP.Lucu.putChunk' \"Hello, world!\"
+--                }
+-- @
 runHttpd ∷ HostMapper α ⇒ Config → α → IO ()
 runHttpd cnf hm
     = do let launchers
index 6a732565a78b8c4cba35020df1eda9a8e8fb6d52..2d240e8bb8bb0b751cdaf1d56a76c24b159dd82f 100644 (file)
@@ -8,6 +8,7 @@ import Control.Monad.Unicode
 import qualified Data.ByteString.Lazy.Char8 as Lazy
 import qualified Data.Collections as C
 import Data.Monoid.Unicode
+import Network
 import Network.HTTP.Lucu
 import Prelude.Unicode
 
@@ -27,7 +28,7 @@ main = let config    = defaultConfig { cnfServerPort = "9999" }
                | otherwise        = Nothing
        in
          do putStrLn "Access http://localhost:9999/ with your browser."
-            runHttpd config mapper
+            withSocketsDo $ runHttpd config mapper
 
 helloWorld ∷ Resource
 helloWorld = C.fromList
index 9259c1361a08a3a7fd5eae50bbddfb253e024944..03bcbdb1a88593972e17e594ca2b6f6c07bd907b 100644 (file)
@@ -3,6 +3,7 @@
   #-}
 import qualified Data.Collections as C
 import MiseRafturai
+import Network
 import Network.HTTP.Lucu
 
 main ∷ IO ()
@@ -11,4 +12,4 @@ main = let config = defaultConfig { cnfServerPort = "9999" }
            tree   = C.fromList [ ([], nonGreedy miseRafturai) ]
        in
          do putStrLn "Access http://localhost:9999/ with your browser."
-            runHttpd config $ resourceMap tree
+            withSocketsDo $ runHttpd config $ resourceMap tree
index f7e8856d6b350ab31320e94315e51059a930e2e7..ba9b5b9d4cfd336c518e6471924bfe574465ed76 100644 (file)
@@ -2,6 +2,7 @@
     UnicodeSyntax
   #-}
 import qualified Data.Collections as C
+import Network
 import Network.HTTP.Lucu
 import SmallFile
 
@@ -11,4 +12,4 @@ main = let config = defaultConfig { cnfServerPort = "9999" }
            tree   = C.fromList [ ([], nonGreedy smallFile) ]
        in
          do putStrLn "Access http://localhost:9999/ with your browser."
-            runHttpd config $ resourceMap tree
+            withSocketsDo $ runHttpd config $ resourceMap tree
index 49945ec666268401256147eee98b201cd07a9876..e827ae67ab8712f2ebbb9da13cadd1b9409ee2e2 100644 (file)
@@ -8,6 +8,7 @@ import qualified Data.Collections as C
 import Control.Monad.Unicode
 import Data.Maybe
 import Data.Monoid.Unicode
+import Network
 import Network.HTTP.Lucu
 
 main ∷ IO ()
@@ -16,7 +17,7 @@ main = let config = defaultConfig { cnfServerPort = "9999" }
            tree   = C.fromList [ ([], nonGreedy resMain) ]
        in
          do putStrLn "Access http://localhost:9999/ with your browser."
-            runHttpd config $ resourceMap tree
+            withSocketsDo $ runHttpd config $ resourceMap tree
 
 resMain ∷ Resource
 resMain = C.fromList
index 23de8b04062c4d6b48b80b2b525ae913aab7610c..624ed042647729a3003849c4106d7ef293fc63b1 100644 (file)
@@ -10,6 +10,7 @@ import Control.Monad.Unicode
 import qualified Data.ByteString.Lazy.Char8 as Lazy
 import qualified Data.Collections as C
 import Data.Time.Clock
+import Network
 import Network.HTTP.Lucu
 import OpenSSL
 import OpenSSL.EVP.PKey
@@ -37,7 +38,7 @@ main = withOpenSSL $
               tree   ∷ ResourceTree
               tree   = C.fromList [ ([], nonGreedy helloWorld) ]
           putStrLn "Access https://localhost:9001/ with your browser."
-          runHttpd config $ resourceMap tree
+          withSocketsDo $ runHttpd config $ resourceMap tree
 
 helloWorld ∷ Resource
 helloWorld