From 3477528600bd6bb1024adbc08d3c61bdf6451f60 Mon Sep 17 00:00:00 2001 From: Matt Parsons Date: Wed, 28 Oct 2015 17:45:50 -0400 Subject: [PATCH] ISO 8601 based generic implementation --- bower.json | 3 ++- src/Data/Date.purs | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bower.json b/bower.json index 499acf0..425796b 100644 --- a/bower.json +++ b/bower.json @@ -26,6 +26,7 @@ "dependencies": { "purescript-enums": "^0.7.0", "purescript-functions": "^0.1.0", - "purescript-globals": "^0.2.0" + "purescript-globals": "^0.2.0", + "purescript-generics": "~0.6.2" } } diff --git a/src/Data/Date.purs b/src/Data/Date.purs index 10daa89..fc763b3 100644 --- a/src/Data/Date.purs +++ b/src/Data/Date.purs @@ -24,6 +24,7 @@ import Control.Monad.Eff import Data.Enum (Enum, Cardinality(..), fromEnum, defaultSucc, defaultPred) import Data.Function (on, Fn2(), runFn2, Fn3(), runFn3) import Data.Maybe (Maybe(..)) +import Data.Generic import Data.Time -- | A native JavaScript `Date` object. @@ -36,11 +37,18 @@ foreign import data JSDate :: * -- | modules. newtype Date = DateTime JSDate +instance genericDate :: Generic Date where + toSpine d = SString (runFn2 jsDateMethod "toISOString" (toJSDate d)) + toSignature _ = SigString + fromSpine (SString s) = fromStringStrict s + fromSpine _ = Nothing + + instance eqDate :: Eq Date where - eq = eq `on` toEpochMilliseconds + eq = gEq instance ordDate :: Ord Date where - compare = compare `on` toEpochMilliseconds + compare = gCompare instance showDate :: Show Date where show d = "(fromEpochMilliseconds " ++ show (toEpochMilliseconds d) ++ ")"