packages feed

timerep 1.0.0 → 1.0.2

raw patch · 4 files changed

+256/−236 lines, 4 files

Files

Data/Time/RFC2822.hs view
@@ -1,99 +1,111 @@-{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}--- |                                                                               --- Module      : Data.Time.RFC2822--- Copyright   : (c) 2011 Hugo Daniel Gomes------ License     : BSD-style--- Maintainer  : mr.hugo.gomes@gmail.com--- Stability   : experimental--- Portability : GHC------ Support for reading and displaying time in the format specified by --- the RFC2822 <http://www.ietf.org/rfc/rfc2822.txt> section 3.3------ Example of usage:--- >--- > import Data.Time.LocalTime--- >--- > showTime :: IO String--- > showTime = getZonedTime >>= return . showRFC2822--- >--- > example1 = "Fri, 21 Nov 1997 09:55:06 -0600"--- > example2 = "Tue, 15 Nov 1994 12:45:26 GMT"--- > example3 = "Tue, 1 Jul 2003 10:52:37 +0200"--- > example4 = "Thu, 13 Feb 1969 23:32:54 -0330"--- > example5 = "Mon, 24 Nov 1997 14:22:01 -0800"--- > example6 = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330"--- > example7 = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330 (Newfoundland Time)"--- > example8 = "24 Nov 1997 14:22:01 -0800"--- > examples = [example1,example2,example3,example4,example5,example6,example7,example8]--- >--- > readAll = map readRFC2822 examples--module Data.Time.RFC2822 (-    -- * Basic type class-    -- $basic-    RFC2822(showRFC2822, readRFC2822)-) where--import Data.Time.Format-import Data.Time.LocalTime-import Data.Time.Calendar-import Data.Maybe -import System.Locale--test1  = "Fri, 21 Nov 1997 09:55:06 -0600"-test2  = "Tue, 15 Nov 1994 12:45:26 GMT"-test3  = "Tue, 1 Jul 2003 10:52:37 +0200"-test4  = "Thu, 13 Feb 1969 23:32:54 -0330"-test5  = "Mon, 24 Nov 1997 14:22:01 -0800"-test6  = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330"-test7  = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330 (Newfoundland Time)"-test8  = "24 Nov 1997 14:22:01 -0800"-test9  = "15 Nov 1994 12:45:26 GMT"-test10 = "Mon,24 Nov 1997 14:22:01 -0800"-test11 = "Thu,\t13\n     Feb\n  1969\n        23:32\n     -0330 (Newfoundland Time)"-tests = [test1, test2, test3, test4, test5, test6, test7, test8, test9, test10-        , test11]-testParse = length (catMaybes (map readRFC2822 tests)) == length tests---- ------------------------------------------------------------------------------- The RFC2822 class definition---- | This class is here to allow future support for other data types --- like Data.Text or Data.ByteString if that becomes necessary-class RFC2822 a where-  showRFC2822 :: ZonedTime -> a-  readRFC2822 :: a -> Maybe ZonedTime---- | For now there is only an instance for the String data type-instance RFC2822 String where-  showRFC2822 zt@(ZonedTime lt z) = -    formatTime defaultTimeLocale "%a, %e %b %Y %T" zt ++ printZone-    where-      timeZoneStr = timeZoneOffsetString z-      printZone = if timeZoneStr == timeZoneOffsetString utc-                    then " GMT"-                    else " " ++ timeZoneStr--  readRFC2822 t = foldr (tryP t') Nothing [ p "%a, %e %b %Y %T GMT"-                                          , p "%a, %e %b %Y %T %z"-                                          , p "%e %b %Y %T GMT"-                                          , p "%e %b %Y %T %z"-                                          -- , p "%FT%T%QZ"-                                          ]-    where -      p :: String -> String -> Maybe ZonedTime-      p f s = parseTime defaultTimeLocale f s--      tryP :: String -> (String -> Maybe a) -> Maybe a -> Maybe a-      tryP s f acc | isJust acc = acc-                   | otherwise = f s--      -- t' is a trimmed t (currently only \n is trimmed)-      -- TODO: trim other white space characters -      t' :: String-      t' = lines t >>= ("" ++)--showTime :: IO String-showTime = getZonedTime >>= return . showRFC2822+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
+-- |                                                                               
+-- Module      : Data.Time.RFC2822
+-- Copyright   : (c) 2011 Hugo Daniel Gomes
+--
+-- License     : BSD-style
+-- Maintainer  : mr.hugo.gomes@gmail.com
+-- Stability   : experimental
+-- Portability : GHC
+--
+-- Support for reading and displaying time in the format specified by 
+-- the RFC2822 <http://www.ietf.org/rfc/rfc2822.txt> section 3.3
+--
+-- Example of usage:
+-- >
+-- > import Data.Time.LocalTime
+-- >
+-- > showTime :: IO String
+-- > showTime = getZonedTime >>= return . showRFC2822
+-- >
+-- > example1 = "Fri, 21 Nov 1997 09:55:06 -0600"
+-- > example2 = "Tue, 15 Nov 1994 12:45:26 GMT"
+-- > example3 = "Tue, 1 Jul 2003 10:52:37 +0200"
+-- > example4 = "Thu, 13 Feb 1969 23:32:54 -0330"
+-- > example5 = "Mon, 24 Nov 1997 14:22:01 -0800"
+-- > example6 = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330"
+-- > example7 = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330 (Newfoundland Time)"
+-- > example8 = "24 Nov 1997 14:22:01 -0800"
+-- > examples = [example1,example2,example3,example4,example5,example6,example7,example8]
+-- >
+-- > readAll = map readRFC2822 examples
+
+module Data.Time.RFC2822 (
+    -- * Basic type class
+    -- $basic
+    RFC2822(showRFC2822, readRFC2822)
+) where
+
+import Data.Time.Format
+import Data.Time.LocalTime
+import Data.Time.Calendar
+import Data.Maybe 
+import System.Locale
+import qualified Data.Attoparsec.Text as A
+import Data.Attoparsec.Text
+import qualified Data.Attoparsec.Combinator as AC
+
+test1  = "Fri, 21 Nov 1997 09:55:06 -0600"
+test2  = "Tue, 15 Nov 1994 12:45:26 GMT"
+test3  = "Tue, 1 Jul 2003 10:52:37 +0200"
+test4  = "Thu, 13 Feb 1969 23:32:54 -0330"
+test5  = "Mon, 24 Nov 1997 14:22:01 -0800"
+test6  = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330"
+test7  = "Thu,          13\n     Feb\n  1969\n        23:32\n     -0330 (Newfoundland Time)" -- Fails
+test8  = "24 Nov 1997 14:22:01 -0800"
+test9  = "15 Nov 1994 12:45:26 GMT"
+test10 = "Mon,24 Nov 1997 14:22:01 -0800"
+test11 = "Thu,\t13\n     Feb\n  1969\n        23:32\n     -0330 (Newfoundland Time)"  -- Fails
+test12 = "Thu, 13 Feb 1969 23:32 -0330 (Newfoundland Time)"  -- Fails
+tests :: [String]
+tests = [test1, test2, test3, test4, test5, test6, test7, test8, test9, test10
+        , test11, test12]
+testParse = length (catMaybes (map readRFC2822 tests)) == length tests
+
+-- ----------------------------------------------------------------------------
+-- The RFC2822 class definition
+
+-- | This class is here to allow future support for other data types 
+-- like Data.Text or Data.ByteString if that becomes necessary
+class RFC2822 a where
+  showRFC2822 :: ZonedTime -> a
+  readRFC2822 :: a -> Maybe ZonedTime
+  formatRFC2822 :: [a]
+
+-- | For now there is only an instance for the String data type
+instance RFC2822 String where
+  showRFC2822 zt@(ZonedTime lt z) = 
+    formatTime defaultTimeLocale "%a, %e %b %Y %T" zt ++ printZone
+    where
+      timeZoneStr = timeZoneOffsetString z
+      printZone = if timeZoneStr == timeZoneOffsetString utc
+                    then " GMT"
+                    else " " ++ timeZoneStr
+
+  formatRFC2822 = [ "%a, %e %b %Y %T GMT"
+                  , "%a, %e %b %Y %T %z"
+                  , "%e %b %Y %T GMT"
+                  , "%e %b %Y %T %z"
+                  -- Support for hours:minutes
+                  , "%a, %e %b %Y %R GMT"
+                  , "%a, %e %b %Y %R %z"
+                  , "%e %b %Y %R GMT"
+                  , "%e %b %Y %R %z"
+                  ]
+
+  readRFC2822 t = foldr (tryP t') Nothing $ map p formatRFC2822
+    where 
+      p :: String -> String -> Maybe ZonedTime
+      p f s = parseTime defaultTimeLocale f s
+
+      tryP :: String -> (String -> Maybe a) -> Maybe a -> Maybe a
+      tryP s f acc | isJust acc = acc
+                   | otherwise = f s
+
+      -- t' is a trimmed t (currently only \n is trimmed)
+      -- TODO: trim other white space characters 
+      t' :: String
+      t' = lines t >>= ("" ++)
+
+showTime :: IO String
+showTime = getZonedTime >>= return . showRFC2822
Data/Time/RFC3339.hs view
@@ -1,82 +1,85 @@-{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}--- |                                                                               --- Module      : Data.Time.RFC3339--- Copyright   : (c) 2011 Hugo Daniel Gomes------ License     : BSD-style--- Maintainer  : mr.hugo.gomes@gmail.com--- Stability   : experimental--- Portability : GHC------ Support for reading and displaying time in the format specified by --- the RFC3339 <http://www.ietf.org/rfc/rfc3339.txt>------ Example of usage:--- >--- > import Data.Time.LocalTime--- >--- > showTime :: IO String--- > showTime = getZonedTime >>= return . showRFC3339--- >--- > example1 = "1985-04-12T23:20:50.52Z"--- > example2 = "1996-12-19T16:39:57-08:00"--- > example3 = "1990-12-31T23:59:60Z"--- > example4 = "1990-12-31T15:59:60-08:00"--- > example5 = "1937-01-01T12:00:27.87+00:20"--- > examples = [example1,example2,example3,example4,example5]--- >--- > readAll = map readRFC3339 examples--module Data.Time.RFC3339 (-    -- * Basic type class-    -- $basic-    RFC3339(showRFC3339, readRFC3339)-) where--import Data.Time.Format-import Data.Time.LocalTime-import Data.Time.Calendar-import Data.Maybe -import System.Locale--test1 = "1985-04-12T23:20:50.52Z"-test2 = "1996-12-19T16:39:57-08:00"-test3 = "1990-12-31T23:59:60Z"-test4 = "1990-12-31T15:59:60-08:00"-test5 = "1937-01-01T12:00:27.87+00:20"-tests = [test1, test2, test3, test4, test5]-testParse = length (catMaybes (map readRFC3339 tests)) == length tests---- ------------------------------------------------------------------------------- The RFC3339 class definition---- | This class is here to allow future support for other data types --- like Data.Text or Data.ByteString if that becomes necessary-class RFC3339 a where-  showRFC3339 :: ZonedTime -> a-  readRFC3339 :: a -> Maybe ZonedTime---- | For now there is only an instance for the String data type-instance RFC3339 String where-  showRFC3339 zt@(ZonedTime lt z) = -    formatTime defaultTimeLocale "%FT%T" zt ++ printZone-    where-      timeZoneStr = timeZoneOffsetString z-      printZone = if timeZoneStr == timeZoneOffsetString utc-                    then "Z"-                    else take 3 timeZoneStr ++ ":" ++ drop 3 timeZoneStr-  readRFC3339 t = foldr (tryP t) Nothing [ p "%FT%TZ"-                                         , p "%FT%T%z"-                                         , p "%FT%T%Q%z"-                                         , p "%FT%T%QZ"-                                         ]-    where -      p :: String -> String -> Maybe ZonedTime-      p f s = parseTime defaultTimeLocale f s--      tryP :: String -> (String -> Maybe a) -> Maybe a -> Maybe a-      tryP s f acc | isJust acc = acc-                   | otherwise = f s--showTime :: IO String-showTime = getZonedTime >>= return . showRFC3339+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
+-- |                                                                               
+-- Module      : Data.Time.RFC3339
+-- Copyright   : (c) 2011 Hugo Daniel Gomes
+--
+-- License     : BSD-style
+-- Maintainer  : mr.hugo.gomes@gmail.com
+-- Stability   : experimental
+-- Portability : GHC
+--
+-- Support for reading and displaying time in the format specified by 
+-- the RFC3339 <http://www.ietf.org/rfc/rfc3339.txt>
+--
+-- Example of usage:
+-- >
+-- > import Data.Time.LocalTime
+-- >
+-- > showTime :: IO String
+-- > showTime = getZonedTime >>= return . showRFC3339
+-- >
+-- > example1 = "1985-04-12T23:20:50.52Z"
+-- > example2 = "1996-12-19T16:39:57-08:00"
+-- > example3 = "1990-12-31T23:59:60Z"
+-- > example4 = "1990-12-31T15:59:60-08:00"
+-- > example5 = "1937-01-01T12:00:27.87+00:20"
+-- > examples = [example1,example2,example3,example4,example5]
+-- >
+-- > readAll = map readRFC3339 examples
+
+module Data.Time.RFC3339 (
+    -- * Basic type class
+    -- $basic
+    RFC3339(showRFC3339, readRFC3339)
+) where
+
+import Data.Time.Format
+import Data.Time.LocalTime
+import Data.Time.Calendar
+import Data.Maybe 
+import System.Locale
+
+test1 = "1985-04-12T23:20:50.52Z"
+test2 = "1996-12-19T16:39:57-08:00"
+test3 = "1990-12-31T23:59:60Z"
+test4 = "1990-12-31T15:59:60-08:00"
+test5 = "1937-01-01T12:00:27.87+00:20"
+tests :: [String]
+tests = [test1, test2, test3, test4, test5]
+testParse = length (catMaybes (map readRFC3339 tests)) == length tests
+
+-- ----------------------------------------------------------------------------
+-- The RFC3339 class definition
+
+-- | This class is here to allow future support for other data types 
+-- like Data.Text or Data.ByteString if that becomes necessary
+class RFC3339 a where
+  showRFC3339 :: ZonedTime -> a
+  readRFC3339 :: a -> Maybe ZonedTime
+  formatRFC3339 :: [a]
+
+-- | For now there is only an instance for the String data type
+instance RFC3339 String where
+  showRFC3339 zt@(ZonedTime lt z) = 
+    formatTime defaultTimeLocale "%FT%T" zt ++ printZone
+    where
+      timeZoneStr = timeZoneOffsetString z
+      printZone = if timeZoneStr == timeZoneOffsetString utc
+                    then "Z"
+                    else take 3 timeZoneStr ++ ":" ++ drop 3 timeZoneStr
+  formatRFC3339 = [ "%FT%TZ"
+                  , "%FT%T%z"
+                  , "%FT%T%Q%z"
+                  , "%FT%T%QZ"
+                  ]
+  readRFC3339 t = foldr (tryP t) Nothing $ map p formatRFC3339
+    where 
+      p :: String -> String -> Maybe ZonedTime
+      p f s = parseTime defaultTimeLocale f s
+
+      tryP :: String -> (String -> Maybe a) -> Maybe a -> Maybe a
+      tryP s f acc | isJust acc = acc
+                   | otherwise = f s
+
+showTime :: IO String
+showTime = getZonedTime >>= return . showRFC3339
LICENSE view
@@ -1,20 +1,20 @@-Copyright (c) 2010 Hugo Daniel H. O. Gomes <hugo.gomes@fcsh.unl.pt>--This software is provided 'as-is', without any express or implied-warranty. In no event will the authors be held liable for any damages-arising from the use of this software.--Permission is granted to anyone to use this software for any purpose,-including commercial applications, and to alter it and redistribute it-freely, subject to the following restrictions:--1. The origin of this software must not be misrepresented; you must not-   claim that you wrote the original software. If you use this software-   in a product, an acknowledgment in the product documentation would-   be appreciated but is not required.--2. Altered source versions must be plainly marked as such, and must not-   be misrepresented as being the original software.--3. This notice may not be removed or altered from any source-   distribution.+Copyright (c) 2010 Hugo Daniel H. O. Gomes <hugo.gomes@fcsh.unl.pt>
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would
+   be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and must not
+   be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+   distribution.
timerep.cabal view
@@ -1,35 +1,40 @@-Name:          timerep-Version:       1.0.0-Category:      Web, Time-Synopsis:      Parse and display time according to some RFCs (RFC3339, RFC2822)-Description:   -    .-    Parse and display time according to some RFC's.-    Supported: -    RFC3339 <http://www.ietf.org/rfc/rfc3339.txt>-    RFC2822 <http://www.ietf.org/rfc/rfc2822.txt>-    .-    This package defines a type class to parse and read time representations -    specified in some RFC's.-    Right now there is only support for reading and showing String-    .-Build-type:    Simple-Maintainer:    Hugo Daniel Gomes <mr.hugo.gomes@gmail.com>-Author:        Hugo Daniel Gomes <mr.hugo.gomes@gmail.com>-Copyright:     Hugo Daniel Gomes-Cabal-version: >= 1.6-License:       BSD3-License-file:  LICENSE-source-repository head                                                             -  type:     git                                                                    -  location: git://github.com/HugoDaniel/RFC3339.git--library-  build-depends:-    base < 5, time >= 1.2, old-locale--  exposed-modules:-    Data.Time.RFC3339-    Data.Time.RFC2822--  extensions: TypeSynonymInstances+Name:          timerep
+Version:       1.0.2
+Category:      Web, Time
+Synopsis:      Parse and display time according to some RFCs (RFC3339, RFC2822)
+Description:   
+    .
+    Parse and display time according to some RFC's.
+    Supported: 
+    RFC3339 <http://www.ietf.org/rfc/rfc3339.txt>
+    RFC2822 <http://www.ietf.org/rfc/rfc2822.txt>
+    .
+    This package defines a type class to parse and read time representations 
+    specified in some RFC's.
+    Right now there is only support for reading and showing String
+    .
+    Special thanks to Koral for all the suggestions and help in solving some bugs
+    .
+Build-type:    Simple
+Maintainer:    Hugo Daniel Gomes <mr.hugo.gomes@gmail.com>
+Author:        Hugo Daniel Gomes <mr.hugo.gomes@gmail.com>
+Copyright:     Hugo Daniel Gomes
+Cabal-version: >= 1.6
+License:       BSD3
+License-file:  LICENSE
+source-repository head                                                             
+  type:     git                                                                    
+  location: git://github.com/HugoDaniel/RFC3339.git
+
+library
+  build-depends:
+    base < 5, 
+    time >= 1.2, 
+    old-locale
+
+  exposed-modules:
+    Data.Time.RFC3339
+    Data.Time.RFC2822
+
+  extensions: TypeSynonymInstances FlexibleInstances
+