packages feed

chu2 2012.11.17 → 2012.11.17.1

raw patch · 8 files changed

+142/−139 lines, 8 filesdep +data-defaultPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: data-default

API changes (from Hackage documentation)

- Chu2.FFI: type Application = Env -> IO Response
- Chu2.Interface.Hack2: chu2AppplicationToHack2Application :: Application -> Application
+ Chu2.Handler.SnapServerFFI: onPort_run :: Integer -> Application -> IO ()
+ Chu2.Interface.Hack2: chu2ApplicationToHack2Application :: Application -> Application
+ Chu2.Interface.Hack2: type Application = Env -> IO Response

Files

chu2.cabal view
@@ -1,5 +1,5 @@ Name:                 chu2-Version:              2012.11.17+Version:              2012.11.17.1 Build-type:           Simple Synopsis:             FFI for Chu2 Agda Web Server Interface Description:@@ -28,6 +28,7 @@     , bytestring     , hack2     , hack2-handler-snap-server+    , data-default        hs-source-dirs: src/   exposed-modules:  
readme.md view
@@ -5,26 +5,19 @@  module Hello where -open import IO.Primitive    using (IO; return)-open import Foreign.Haskell using (Unit)+open import IO.Primitive    using (return) open import Data.List       using ([]) open import Chu2.ByteString using (pack) open import Function        using (_$_; const)--open import Chu2--postulate-  run : ApplicationData → IO Unit--{-# IMPORT Chu2.Handler.SnapServerFFI #-}-{-# COMPILED run Chu2.Handler.SnapServerFFI.run #-}+open import Chu2               hello-world-response = response OK [] (pack "Hello Agda!")  hello-world-app : Application hello-world-app = const $ return hello-world-response -main = run $ chu2 hello-world-app+open import Chu2.Handler.SnapServer+main = onPort 3000 run $ chu2 hello-world-app   ```
src/Chu2.agda view
@@ -1,108 +1,30 @@ module Chu2 where -{-# IMPORT Chu2.FFI #-}--open import Data.List-open import Foreign.Haskell-open import Data.String-open import Chu2.ByteString--import IO.Primitive as Prim+open import Data.List using (List; [_])+open import Chu2.ByteString using (ByteString; pack; empty)+open import Foreign.Haskell using (Unit)+open import IO.Primitive using (IO)  data Tuple (A : Set)(B : Set) : Set where     _,_ : A → B → Tuple A B +{-# IMPORT Chu2.FFI #-} {-# COMPILED_DATA Tuple (,) (,) #-}  Header = Tuple ByteString ByteString  Headers = List Header -data Status : Set where-  OK                        : Status-  Created                   : Status-  Accepted                  : Status-  NoContent                 : Status-  MultipleChoices           : Status-  MovedPermanently          : Status-  SeeOther                  : Status-  NotModified               : Status-  MovedTemporarily          : Status-  BadRequest                : Status-  Unauthorized              : Status-  Forbidden                 : Status-  NotFound                  : Status-  MethodNotAllowed          : Status-  NotAcceptable             : Status-  Conflict                  : Status-  Gone                      : Status-  PreconditionFailed        : Status-  RequestEntityTooLarge     : Status-  RequestURItooLong         : Status-  UnsupportedMediaType      : Status-  NotImplemented            : Status-  ServiceUnavailable        : Status--{-# COMPILED_DATA Status Chu2.FFI.Status-  Chu2.FFI.OK-  Chu2.FFI.Created-  Chu2.FFI.Accepted-  Chu2.FFI.NoContent-  Chu2.FFI.MultipleChoices-  Chu2.FFI.MovedPermanently-  Chu2.FFI.SeeOther-  Chu2.FFI.NotModified-  Chu2.FFI.MovedTemporarily-  Chu2.FFI.BadRequest-  Chu2.FFI.Unauthorized-  Chu2.FFI.Forbidden-  Chu2.FFI.NotFound-  Chu2.FFI.MethodNotAllowed-  Chu2.FFI.NotAcceptable-  Chu2.FFI.Conflict-  Chu2.FFI.Gone-  Chu2.FFI.PreconditionFailed-  Chu2.FFI.RequestEntityTooLarge-  Chu2.FFI.RequestURItooLong-  Chu2.FFI.UnsupportedMediaType-  Chu2.FFI.NotImplemented-  Chu2.FFI.ServiceUnavailable-#-}--Body = ByteString--data ResponseData : Set where-  responseData : -      Status-    → Headers-    → Body-    → ResponseData--{-# COMPILED_DATA ResponseData Chu2.FFI.Response Chu2.FFI.Response #-}---record Response : Set where-  constructor response-  field-    status  : Status-    headers : Headers-    body    : Body--ResponseToResponseData : Response → ResponseData-ResponseToResponseData -  ( response-      status-      headers-      body-  ) =-  -  responseData-    status-    headers-    body- data RequestMethod : Set where-  HEAD GET PUT DELETE POST TRACE CONNECT OPTIONS : RequestMethod+  OPTIONS   : RequestMethod+  GET       : RequestMethod+  HEAD      : RequestMethod+  POST      : RequestMethod+  PUT       : RequestMethod+  DELETE    : RequestMethod+  TRACE     : RequestMethod+  CONNECT   : RequestMethod+    {-# COMPILED_DATA RequestMethod Chu2.FFI.RequestMethod     Chu2.FFI.OPTIONS@@ -131,7 +53,7 @@ HttpHeaders   =  Headers Chu2Version   =  ByteString Chu2Input     =  ByteString-Chu2Errors    =  ByteString → Prim.IO Unit+Chu2Errors    =  ByteString → IO Unit Chu2Headers   =  Headers  data EnvData : Set where@@ -169,8 +91,8 @@     chu2Headers    : Chu2Headers             -EnvDataToEnv : EnvData → Env-EnvDataToEnv+envDataToEnv : EnvData → Env+envDataToEnv   ( envData       requestMethod         scriptName     @@ -201,11 +123,109 @@     chu2Headers      +data Status : Set where+  OK                        : Status+  Created                   : Status+  Accepted                  : Status+  NoContent                 : Status+  MultipleChoices           : Status+  MovedPermanently          : Status+  SeeOther                  : Status+  NotModified               : Status+  MovedTemporarily          : Status+  BadRequest                : Status+  Unauthorized              : Status+  Forbidden                 : Status+  NotFound                  : Status+  MethodNotAllowed          : Status+  NotAcceptable             : Status+  Conflict                  : Status+  Gone                      : Status+  PreconditionFailed        : Status+  RequestEntityTooLarge     : Status+  RequestURItooLong         : Status+  UnsupportedMediaType      : Status+  NotImplemented            : Status+  ServiceUnavailable        : Status -Application = Env → Prim.IO Response-ApplicationData = EnvData → Prim.IO ResponseData+{-# COMPILED_DATA Status Chu2.FFI.Status+  Chu2.FFI.OK+  Chu2.FFI.Created+  Chu2.FFI.Accepted+  Chu2.FFI.NoContent+  Chu2.FFI.MultipleChoices+  Chu2.FFI.MovedPermanently+  Chu2.FFI.SeeOther+  Chu2.FFI.NotModified+  Chu2.FFI.MovedTemporarily+  Chu2.FFI.BadRequest+  Chu2.FFI.Unauthorized+  Chu2.FFI.Forbidden+  Chu2.FFI.NotFound+  Chu2.FFI.MethodNotAllowed+  Chu2.FFI.NotAcceptable+  Chu2.FFI.Conflict+  Chu2.FFI.Gone+  Chu2.FFI.PreconditionFailed+  Chu2.FFI.RequestEntityTooLarge+  Chu2.FFI.RequestURItooLong+  Chu2.FFI.UnsupportedMediaType+  Chu2.FFI.NotImplemented+  Chu2.FFI.ServiceUnavailable+#-} -open Prim using (_>>=_; return)+Body = ByteString +data ResponseData : Set where+  responseData : +      Status+    → Headers+    → Body+    → ResponseData++{-# COMPILED_DATA ResponseData Chu2.FFI.Response Chu2.FFI.Response #-}+++record Response : Set where+  constructor response+  field+    status  : Status+    headers : Headers+    body    : Body++responseToResponseData : Response → ResponseData+responseToResponseData +  ( response+      status+      headers+      body+  ) =+  +  responseData+    status+    headers+    body+    +    +    +defaultResponse : Response+defaultResponse = +  record+    {+      status = OK+    ; headers = [(pack "Content-Type", pack "text/plain")]+    ; body = pack "Chu2!"+    }++ApplicationData = EnvData → IO ResponseData+MiddlewareData = ApplicationData → ApplicationData++Application = Env → IO Response+Middleware = Application → Application++Handler = ApplicationData → IO Unit++open IO.Primitive using (_>>=_; return)+ chu2 : Application → ApplicationData-chu2 app aEnvData = app (EnvDataToEnv aEnvData) >>= \aResponse → return (ResponseToResponseData aResponse)+chu2 app = λ aEnvData → app (envDataToEnv aEnvData) >>= λ aResponse → return (responseToResponseData aResponse)
src/Chu2/ByteString.agda view
@@ -11,7 +11,11 @@   ByteString  : Set   pack        : String -> ByteString   unpack      : ByteString -> String+  empty       : ByteString+  +    {-# COMPILED_TYPE ByteString Data.ByteString.Char8.ByteString #-} {-# COMPILED pack Data.ByteString.Char8.pack #-} {-# COMPILED unpack Data.ByteString.Char8.unpack #-}+{-# COMPILED empty Data.ByteString.Char8.empty #-}
src/Chu2/FFI.hs view
@@ -3,11 +3,6 @@ import Data.ByteString (ByteString) import Data.ByteString.Char8 (pack) -{--data Header = Header ByteString ByteString-  deriving (Show)--}- type Header = (,) ByteString ByteString  data RequestMethod =@@ -83,5 +78,4 @@   deriving (Show)  -type Application = Env -> IO Response 
src/Chu2/Handler/SnapServerFFI.hs view
@@ -3,6 +3,10 @@ import Chu2.FFI import Chu2.Interface.Hack2 import qualified Hack2.Handler.SnapServer as Snap+import Data.Default  run :: Application -> IO ()-run app = Snap.run (chu2AppplicationToHack2Application app)+run app = Snap.run (chu2ApplicationToHack2Application app)++onPort_run :: Integer -> Application -> IO ()+onPort_run port app = Snap.runWithConfig def {Snap.port = fromIntegral port} (chu2ApplicationToHack2Application app)
src/Chu2/Interface/Hack2.hs view
@@ -24,14 +24,6 @@ chu2ErrorsFromHack2Errors :: Hack2.HackErrors -> Chu2Errors chu2ErrorsFromHack2Errors = Hack2.unHackErrors -{--headerToTuple :: Header -> (ByteString, ByteString)-headerToTuple (Header x y) = (x,y)--tupleToHeader :: (ByteString, ByteString) -> Header-tupleToHeader (x,y) = Header x y--}- chu2EnvFromHack2Env :: Hack2.Env -> Env chu2EnvFromHack2Env e =    Env@@ -86,8 +78,10 @@ showStatus ServiceUnavailable = 503  -chu2AppplicationToHack2Application :: Application -> Hack2.Application-chu2AppplicationToHack2Application app = \hack2Env -> do+type Application = Env -> IO Response++chu2ApplicationToHack2Application :: Application -> Hack2.Application+chu2ApplicationToHack2Application app = \hack2Env -> do   chu2Response <- app (chu2EnvFromHack2Env hack2Env)   return (chu2ResponseToHack2Response chu2Response)   
src/Hello.agda view
@@ -1,22 +1,15 @@ module Hello where -open import IO.Primitive    using (IO; return)-open import Foreign.Haskell using (Unit)+open import IO.Primitive    using (return) open import Data.List       using ([]) open import Chu2.ByteString using (pack) open import Function        using (_$_; const)--open import Chu2--postulate-  run : ApplicationData → IO Unit--{-# IMPORT Chu2.Handler.SnapServerFFI #-}-{-# COMPILED run Chu2.Handler.SnapServerFFI.run #-}+open import Chu2               hello-world-response = response OK [] (pack "Hello Agda!")  hello-world-app : Application hello-world-app = const $ return hello-world-response -main = run $ chu2 hello-world-app+open import Chu2.Handler.SnapServer+main = onPort 3000 run $ chu2 hello-world-app