git.iko.soy/purescript-intl
on 3a7bbdc help sign in
7 files changed+144−307
since splitsnapshots
unifiedsplit
src/Data/Intl/DateTimeFormat.js+2 src/Data/Intl/DateTimeFormat.purs+98−94 src/Data/Intl/DateTimeFormat/Class.purs−41 src/Data/Intl/DateTimeFormat/Generic.purs+39−5 src/Data/Intl/DateTimeFormat/Types.js−3 src/Data/Intl/DateTimeFormat/Types.purs+3−161 test/Test/Main.purs+2−3
src/Data/Intl/DateTimeFormat.js+2
@@ -1,5 +1,7 @@
11"use strict";
22
3+exports["undefined"] = undefined;
4+
35exports.dateTimeFormatImpl = function(locales) {
46 return function(options) {
57 return new Intl.DateTimeFormat(locales, options);
src/Data/Intl/DateTimeFormat.purs+98−94
@@ -1,8 +1,17 @@
1−module Data.Intl.DateTimeFormat
1+module Data.Intl.DateTimeFormat
22 ( LocalesOption
33 , LocaleMatcher(..)
44 , TimeZone(..)
55 , FormatMatcher(..)
6+ , WeekdayYearMonthDayHourMinuteSecond(..)
7+ , WeekdayYearMonthDay(..)
8+ , YearMonthDay(..)
9+ , YearMonth(..)
10+ , MonthDay(..)
11+ , HourMinuteSecond(..)
12+ , HourMinute(..)
13+ , Undefined
14+ , undefined
615 , DateTimeFormatOptions(..)
716 , DateTimeFormatOptions'
817 , DateTimeComponents(..)
@@ -22,19 +31,23 @@ import Data.Either (Either(..))
2231import Data.Foreign (F, Foreign, ForeignError(..), isUndefined, readString)
2332import Data.Foreign.Index ((!))
2433import Data.Function.Uncurried (Fn3, Fn4, runFn3, runFn4)
25−import Data.Intl.DateTimeFormat.Class (class FormatComponent, FormatComponentRecord(FormatComponentRecord), formatComponent)
34+import Data.Generic.Rep (class Generic)
35+import Data.Intl.DateTimeFormat.Generic (class FormatComponent, defaultComponentRecord, formatComponent, genericFormatComponent)
2636import Data.JSDate (JSDate)
2737import Data.Maybe (Maybe(..), fromMaybe, maybe)
28−import Data.Newtype (class Newtype, un)
38+import Data.Newtype (class Newtype)
2939import Data.StrMap (union)
3040import Data.Symbol (SProxy(..))
3141import Data.Traversable (sequence)
32−import Data.Variant (Variant, case_, default, on)
42+import Data.Variant (Variant, default, on)
3343import Prelude (class Eq, class Show, Unit, bind, id, pure, show, (#), ($), (<$>), (<<<), (>>=))
3444import Unsafe.Coerce (unsafeCoerce)
3545
3646foreign import data LocalesOption' :: Type
3747
48+foreign import data Undefined :: Type
49+foreign import undefined :: Undefined
50+
3851foreign import dateTimeFormatImpl :: LocalesOption' -> DateTimeFormatOptions_ -> DateTimeFormat
3952
4053newtype DateTimeFormatOptions_ = DateTimeFormatOptions_
@@ -86,6 +99,85 @@ instance showFormatMatcher :: Show FormatMatcher where
8699 show FMBasic = "basic"
87100 show FMBestFit = "best fit"
88101
102+newtype WeekdayYearMonthDayHourMinuteSecond = WeekdayYearMonthDayHourMinuteSecond
103+ { weekday :: StringRep
104+ , year :: NumericRep
105+ , month :: MonthRep
106+ , day :: NumericRep
107+ , hour :: NumericRep
108+ , minute :: NumericRep
109+ , second :: NumericRep
110+ }
111+
112+derive instance genericWeekdayYearMonthDayHourMinuteSecond :: Generic WeekdayYearMonthDayHourMinuteSecond _
113+
114+instance formatComponentWeekdayYearMonthDayHourMinuteSecond :: FormatComponent WeekdayYearMonthDayHourMinuteSecond where
115+ formatComponent = genericFormatComponent
116+
117+newtype WeekdayYearMonthDay = WeekdayYearMonthDay
118+ { weekday :: StringRep
119+ , year :: NumericRep
120+ , month :: MonthRep
121+ , day :: NumericRep
122+ }
123+
124+derive instance genericWeekdayYearMonthDay :: Generic WeekdayYearMonthDay _
125+
126+instance formatComponentWeekdayYearMonthDay :: FormatComponent WeekdayYearMonthDay where
127+ formatComponent = genericFormatComponent
128+
129+newtype YearMonthDay = YearMonthDay
130+ { year :: NumericRep
131+ , month :: MonthRep
132+ , day :: NumericRep
133+ }
134+
135+derive instance genericYearMonthDay :: Generic YearMonthDay _
136+
137+instance formatComponentYearMonthDay :: FormatComponent YearMonthDay where
138+ formatComponent = genericFormatComponent
139+
140+newtype YearMonth = YearMonth
141+ { year :: NumericRep
142+ , month :: MonthRep
143+ }
144+
145+derive instance genericYearMonth :: Generic YearMonth _
146+
147+instance formatComponentYearMonth :: FormatComponent YearMonth where
148+ formatComponent = genericFormatComponent
149+
150+newtype MonthDay = MonthDay
151+ { month :: MonthRep
152+ , day :: NumericRep
153+ }
154+
155+derive instance genericMonthDay :: Generic MonthDay _
156+
157+instance formatComponentMonthDay :: FormatComponent MonthDay where
158+ formatComponent = genericFormatComponent
159+
160+newtype HourMinuteSecond = HourMinuteSecond
161+ { hour :: NumericRep
162+ , minute :: NumericRep
163+ , second :: NumericRep
164+ }
165+
166+derive instance genericHourMinuteSecond :: Generic HourMinuteSecond _
167+
168+instance formatComponentHourMinuteSecond :: FormatComponent HourMinuteSecond where
169+ formatComponent = genericFormatComponent
170+
171+newtype HourMinute = HourMinute
172+ { hour :: NumericRep
173+ , minute :: NumericRep
174+ }
175+
176+derive instance genericHourMinute :: Generic HourMinute _
177+
178+instance formatComponentHourMinute :: FormatComponent HourMinute where
179+ formatComponent = genericFormatComponent
180+
89181type DateTimeComponents a =
90182 Variant
91183 ( weekdayYearMonthDayHourMinuteSecond :: WeekdayYearMonthDayHourMinuteSecond
@@ -120,7 +212,7 @@ formatDateTimeOptions (DateTimeFormatOptions opts comps) = merge opts' (compsCoe
120212 , hour12: fromMaybe (unsafeCoerce undefined) opts.hour12
121213 , formatMatcher: maybe undefinedString show opts.formatMatcher
122214 }
123− comps' = un FormatComponentRecord $ case_
215+ comps' = default (defaultComponentRecord)
124216 # on (SProxy :: SProxy "weekdayYearMonthDayHourMinuteSecond") formatComponent
125217 # on (SProxy :: SProxy "weekdayYearMonthDay") formatComponent
126218 # on (SProxy :: SProxy "yearMonthDay") formatComponent
@@ -196,88 +288,6 @@ foreign import createDateTimeFormatImpl
196288 DateTimeFormatOptions_
197289 (F DateTimeFormat)
198290
199−-- | Examples
200−-- | ``` purescript
201−-- | import Data.Variant (inj)
202−-- |
203−-- | fmtHourMinute = F DateTimeFormat
204−-- | fmtHourMinute = createDateTimeFormat locale opts
205−-- | where
206−-- | locale = inj (SProxy :: SProxy "locale") "en-GB"
207−-- | opts = (DateTimeFormatOptions
208−-- | { localeMatcher: Nothing
209−-- | , timeZone: (Just (TimeZone "Europe/London"))
210−-- | , hour12: Just false
211−-- | , formatMatcher: Nothing
212−-- | }
213−-- | (inj (SProxy :: SProxy "hourMinute")
214−-- | (HourMinute {hour: TwoDigit, minute: TwoDigit}))
215−-- |
216−-- |
217−-- | fmtDate :: F DateTimeFormat
218−-- | fmtDate = createDateTimeFormat locale opts
219−-- | wher
220−-- | locale = inj (SProxy :: SProxy "locale") "en-GB"
221−-- | opts :: DateTimeFormatOptions'
222−-- | opts =
223−-- | (DateTimeFormatOptions
224−-- | { localeMatcher: Nothing
225−-- | , timeZone: (Just (TimeZone "Europe/London"))
226−-- | , hour12: Just true
227−-- | , formatMatcher: Nothing
228−-- | }
229−-- | (inj
230−-- | (SProxy :: SProxy "weekdayYearMonthDayHourMinuteSecond")
231−-- | (WeekdayYearMonthDayHourMinuteSecond
232−-- | { weekday: Short
233−-- | , year: Numeric
234−-- | , month: MonthLong
235−-- | , day: Numeric
236−-- | , hour: Numeric
237−-- | , minute: Numeric
238−-- | , second: Numeric
239−-- | }
240−-- | )
241−-- | )
242−-- | )
243−-- | ```
244−-- | You have predifined types: `WeekdayYearMonthDayHourMinuteSecond`,
245−-- | `WeekdayYearMonthDay`, `YearMonthDay`, `YearMonth`, `MonthDay`,
246−-- | `HourMinuteSecond`, `HourMinute`. But you can also provide your own by
247−-- | implementing `FormatComponent` class (or by deriving it), e.g.
248−-- | ``` purescript
249−-- | newtype EraYear = EraYear
250−-- | { era :: StringRep
251−-- | , year :: NumericRep
252−-- | }
253−-- |
254−-- | derive instance genericEraYear :: Generic EraYear _
255−-- |
256−-- | instance formatComponentEraYear :: FormatComponent EraYear where
257−-- | formatComponent = genericFormatComponent
258−-- |
259−-- | fmtEraYear :: F DateTimeFormat
260−-- | fmtEraYear = createDateTimeFormat locales opts
261−-- | where
262−-- | locale = inj (SProxy :: SProxy "locale") "en-GB"
263−-- | opts :: DateTimeFormatOptions EraYear
264−-- | opts =
265−-- | (DateTimeFormatOptions
266−-- | { localeMatcher: Nothing
267−-- | , timeZone: (Just (TimeZone "Europe/London"))
268−-- | , hour12: Just true
269−-- | , formatMatcher: Nothing
270−-- | }
271−-- | (inj
272−-- | (SProxy :: SProxy "custom")
273−-- | (EraYear
274−-- | { era: Long
275−-- | , year: Numeric
276−-- | }
277−-- | )
278−-- | )
279−-- | )
280−-- | ```
281291createDateTimeFormat
282292 :: forall a
283293 .(FormatComponent a)
@@ -291,12 +301,6 @@ createDateTimeFormat ls opts =
291301 (toLocale ls)
292302 (formatDateTimeOptions opts)
293303
294−-- | Examples
295−-- | ``` purescript
296−-- | formatJSDate (either (const "") id $ runExcept fmtHourMinute) date -- "12:00"
297−-- | formatJSDate (either (const "") id $ fmtDate) date -- "Tue, January 2, 2018, 12:00:00 PM"
298−-- | formatJSDate (either (const "") id $ fmtEraYear) date -- "2018 Anno Domini"
299−-- | ```
300304foreign import formatJSDate :: DateTimeFormat -> JSDate -> String
301305
302306foreign import supportedLocalesOfImpl
@@ -305,7 +309,7 @@ foreign import supportedLocalesOfImpl
305309 (Array String -> Either String (Array String))
306310 (Array String)
307311 (Either String (Array String))
308−
312+
309313foreign import formatToPartsImpl :: DateTimeFormat -> JSDate -> Array Foreign
310314
311315formatToParts :: DateTimeFormat -> JSDate -> F (Array FormatParts)
src/Data/Intl/DateTimeFormat/Class.pursdeleted−41
@@ -1,41 +0,0 @@
1−module Data.Intl.DateTimeFormat.Class where
2−
3−import Data.Maybe (Maybe(..))
4−import Data.Newtype (class Newtype)
5−import Prelude (class Eq, Unit)
6−
7−newtype FormatComponentRecord = FormatComponentRecord
8− { era :: Maybe String
9− , weekday :: Maybe String
10− , year :: Maybe String
11− , month :: Maybe String
12− , day :: Maybe String
13− , hour :: Maybe String
14− , minute :: Maybe String
15− , second :: Maybe String
16− , timeZoneName :: Maybe String
17− }
18−
19−derive instance newtypeFormatComponentRecord :: Newtype FormatComponentRecord _
20−
21−derive instance eqFormatComponentRecord :: Eq FormatComponentRecord
22−
23−defaultComponentRecord :: FormatComponentRecord
24−defaultComponentRecord = FormatComponentRecord
25− { era: Nothing
26− , weekday: Nothing
27− , year: Nothing
28− , month: Nothing
29− , day: Nothing
30− , hour: Nothing
31− , minute: Nothing
32− , second: Nothing
33− , timeZoneName: Nothing
34− }
35−
36−
37−class FormatComponent a where
38− formatComponent :: a -> FormatComponentRecord
39−
40−instance unitFormatComponent :: FormatComponent Unit where
41− formatComponent _ = defaultComponentRecord
src/Data/Intl/DateTimeFormat/Generic.purs+39−5
@@ -1,17 +1,51 @@
11module Data.Intl.DateTimeFormat.Generic
2− ( class GenericFormatComponent
2+ ( class FormatComponent
3+ , formatComponent
4+ , class GenericFormatComponent
35 , genericFormatComponent'
46 , genericFormatComponent
57 , class GenericFormatComponentFields
68 , genericFormatComponentFields
9+ , defaultComponentRecord
10+ , FormatComponentRecord
711 ) where
812
913import Data.Generic.Rep (class Generic, Constructor(Constructor), Field(..), NoConstructors, Product(..), Rec(..), from)
10−import Data.Intl.DateTimeFormat.Class (FormatComponentRecord(..))
1114import Data.Intl.DateTimeFormat.Types (MonthRep, NumericRep, TimeZoneNameRep, StringRep)
1215import Data.Maybe (Maybe(..))
1316import Data.StrMap (StrMap, lookup, singleton, union)
14−import Prelude (show)
17+import Prelude (Unit, show)
18+
19+type FormatComponentRecord =
20+ { era :: Maybe String
21+ , weekday :: Maybe String
22+ , year :: Maybe String
23+ , month :: Maybe String
24+ , day :: Maybe String
25+ , hour :: Maybe String
26+ , minute :: Maybe String
27+ , second :: Maybe String
28+ , timeZoneName :: Maybe String
29+ }
30+
31+defaultComponentRecord :: FormatComponentRecord
32+defaultComponentRecord =
33+ { era: Nothing
34+ , weekday: Nothing
35+ , year: Nothing
36+ , month: Nothing
37+ , day: Nothing
38+ , hour: Nothing
39+ , minute: Nothing
40+ , second: Nothing
41+ , timeZoneName: Nothing
42+ }
43+
44+class FormatComponent a where
45+ formatComponent :: a -> FormatComponentRecord
46+
47+instance unitFormatComponent :: FormatComponent Unit where
48+ formatComponent _ = defaultComponentRecord
1549
1650class GenericFormatComponent a where
1751 genericFormatComponent' :: a -> FormatComponentRecord
@@ -20,7 +54,7 @@ class GenericFormatComponentFields a where
2054 genericFormatComponentFields :: a -> StrMap String
2155
2256instance genericFormatComponentNoConsturctors :: GenericFormatComponent NoConstructors where
23− genericFormatComponent' a = FormatComponentRecord
57+ genericFormatComponent' a =
2458 { era: Nothing
2559 , weekday: Nothing
2660 , year: Nothing
@@ -80,7 +114,7 @@ instance genericFormatComponentFieldsProduct
80114instance genericFormatComponentRec
81115 :: (GenericFormatComponentFields a)
82116 => GenericFormatComponent (Rec a) where
83− genericFormatComponent' (Rec a) = FormatComponentRecord
117+ genericFormatComponent' (Rec a) =
84118 { era: "era" `lookup` u
85119 , weekday: "weekday" `lookup` u
86120 , year: "year" `lookup` u
src/Data/Intl/DateTimeFormat/Types.jsdeleted−3
@@ -1,3 +0,0 @@
1−"use strict";
2−
3−exports["undefined"] = undefined;
src/Data/Intl/DateTimeFormat/Types.purs+3−161
@@ -6,32 +6,16 @@ module Data.Intl.DateTimeFormat.Types
66 , FormatParts(..)
77 , readFormatParts
88 , ResolvedOptions(..)
9− , WeekdayYearMonthDayHourMinuteSecond(..)
10− , WeekdayYearMonthDay(..)
11− , YearMonthDay(..)
12− , YearMonth(..)
13− , MonthDay(..)
14− , HourMinuteSecond(..)
15− , HourMinute(..)
16− , Undefined
17− , undefined
189 ) where
1910
2011import Data.Foreign (F, Foreign, ForeignError(..), fail, readString)
2112import Data.Foreign.Index ((!))
22−import Data.Intl.DateTimeFormat.Class (class FormatComponent, FormatComponentRecord(..), defaultComponentRecord)
23−import Data.Maybe (Maybe(..))
24−import Data.Newtype (class Newtype, over)
25−import Prelude (class Eq, class Show, bind, pure, show, ($), (<>), (>>=))
26−
27−foreign import data Undefined :: Type
28−
29−foreign import undefined :: Undefined
13+import Data.Maybe (Maybe)
14+import Data.Newtype (class Newtype)
15+import Prelude (class Show, bind, pure, ($), (<>), (>>=))
3016
3117data StringRep = Narrow | Short | Long
3218
33−derive instance eqStringRep :: Eq StringRep
34−
3519instance showStringRep :: Show StringRep where
3620 show Narrow = "narrow"
3721 show Short = "short"
@@ -39,16 +23,12 @@ instance showStringRep :: Show StringRep where
3923
4024data NumericRep = Numeric | TwoDigit
4125
42−derive instance eqNumericRep :: Eq NumericRep
43−
4426instance showNumericRep :: Show NumericRep where
4527 show Numeric = "numeric"
4628 show TwoDigit = "2-digit"
4729
4830data MonthRep = MonthNumeric | MonthTwoDigit | MonthNarrow | MonthShort | MonthLong
4931
50−derive instance eqMonthRep :: Eq MonthRep
51−
5232instance showMonthRep :: Show MonthRep where
5333 show MonthNumeric = "numeric"
5434 show MonthTwoDigit = "2-digit"
@@ -58,8 +38,6 @@ instance showMonthRep :: Show MonthRep where
5838
5939data TimeZoneNameRep = TimeZoneNameShort | TimeZoneNameLong
6040
61−derive instance eqTimeZoneNameRep :: Eq TimeZoneNameRep
62−
6341instance showTimeZoneRep :: Show TimeZoneNameRep where
6442 show TimeZoneNameShort = "short"
6543 show TimeZoneNameLong = "long"
@@ -75,8 +53,6 @@ data FormatParts
7553 | DayPeriod String
7654 | Literal String
7755
78−derive instance eqFormatParts :: Eq FormatParts
79−
8056readFormatParts :: Foreign -> F FormatParts
8157readFormatParts val = do
8258 type_ <- val ! "type" >>= readString
@@ -110,137 +86,3 @@ newtype ResolvedOptions = ResolvedOptions
11086 }
11187
11288derive instance newtypeResolvedOptions :: Newtype ResolvedOptions _
113−
114−derive instance eqResolvedOptions :: Eq ResolvedOptions
115−
116−newtype WeekdayYearMonthDayHourMinuteSecond = WeekdayYearMonthDayHourMinuteSecond
117− { weekday :: StringRep
118− , year :: NumericRep
119− , month :: MonthRep
120− , day :: NumericRep
121− , hour :: NumericRep
122− , minute :: NumericRep
123− , second :: NumericRep
124− }
125−
126−derive instance newtypeWeekdayYearMonthDayHourMinuteSecond :: Newtype WeekdayYearMonthDayHourMinuteSecond _
127−
128−derive instance eqWeekdayYearMonthDayHourMinuteSecond :: Eq WeekdayYearMonthDayHourMinuteSecond
129−
130−instance formatComponentWeekdayYearMonthDayHourMinuteSecond :: FormatComponent WeekdayYearMonthDayHourMinuteSecond where
131− formatComponent (WeekdayYearMonthDayHourMinuteSecond { weekday, year, month, day, hour, minute, second }) = over FormatComponentRecord
132− (\r -> r { weekday = Just (show weekday)
133− , year = Just (show year)
134− , month = Just (show month)
135− , day = Just (show day)
136− , hour = Just (show hour)
137− , minute = Just (show minute)
138− , second = Just (show second)
139− }
140− ) defaultComponentRecord
141−
142−newtype WeekdayYearMonthDay = WeekdayYearMonthDay
143− { weekday :: StringRep
144− , year :: NumericRep
145− , month :: MonthRep
146− , day :: NumericRep
147− }
148−
149−derive instance newtypeWeekdayYearMonthDay :: Newtype WeekdayYearMonthDay _
150−
151−derive instance eqWeekdayYearMonthDay :: Eq WeekdayYearMonthDay
152−
153−instance formatComponentWeekdayYearMonthDay :: FormatComponent WeekdayYearMonthDay where
154− formatComponent (WeekdayYearMonthDay { weekday, year, month, day }) = over FormatComponentRecord
155− (\r -> r { weekday = Just (show weekday)
156− , year = Just (show year)
157− , month = Just (show month)
158− , day = Just (show day)
159− }
160− ) defaultComponentRecord
161−
162−
163−newtype YearMonthDay = YearMonthDay
164− { year :: NumericRep
165− , month :: MonthRep
166− , day :: NumericRep
167− }
168−
169−derive instance newtypeYearMonthDay :: Newtype YearMonthDay _
170−
171−derive instance eqYearMonthDay :: Eq YearMonthDay
172−
173−instance formatComponentYearMonthDay :: FormatComponent YearMonthDay where
174− formatComponent (YearMonthDay { year, month, day }) = over FormatComponentRecord
175− (\r -> r { year = Just (show year)
176− , month = Just (show month)
177− , day = Just (show day)
178− }
179− ) defaultComponentRecord
180−
181−
182−newtype YearMonth = YearMonth
183− { year :: NumericRep
184− , month :: MonthRep
185− }
186−
187−derive instance newtypeYearMonth :: Newtype YearMonth _
188−
189−derive instance eqYearMonth :: Eq YearMonth
190−
191−instance formatComponentYearMonth :: FormatComponent YearMonth where
192− formatComponent (YearMonth { year, month }) = over FormatComponentRecord
193− (\r -> r { year = Just (show year)
194− , month = Just (show month)
195− }
196− ) defaultComponentRecord
197−
198−newtype MonthDay = MonthDay
199− { month :: MonthRep
200− , day :: NumericRep
201− }
202−
203−derive instance newtypeMonthDay :: Newtype MonthDay _
204−
205−derive instance eqMonthDay :: Eq MonthDay
206−
207−instance formatComponentMonthDay :: FormatComponent MonthDay where
208− formatComponent (MonthDay { month, day }) = over FormatComponentRecord
209− (\r -> r { month = Just (show month)
210− , day = Just (show day)
211− }
212− ) defaultComponentRecord
213−
214−newtype HourMinuteSecond = HourMinuteSecond
215− { hour :: NumericRep
216− , minute :: NumericRep
217− , second :: NumericRep
218− }
219−
220−derive instance newtypeHourMinuteSecond :: Newtype HourMinuteSecond _
221−
222−derive instance eqHourMinuteSecond :: Eq HourMinuteSecond
223−
224−instance formatComponentHourMinuteSecond :: FormatComponent HourMinuteSecond where
225− formatComponent (HourMinuteSecond { hour, minute, second }) = over FormatComponentRecord
226− (\r -> r { hour = Just (show hour)
227− , minute = Just (show minute)
228− , second = Just (show second)
229− }
230− ) defaultComponentRecord
231−
232−newtype HourMinute = HourMinute
233− { hour :: NumericRep
234− , minute :: NumericRep
235− }
236−
237−derive instance newtypeHourMinute :: Newtype HourMinute _
238−
239−derive instance eqHourMinute :: Eq HourMinute
240−
241−instance formatComponentHourMinute :: FormatComponent HourMinute where
242− formatComponent (HourMinute { hour, minute }) = over FormatComponentRecord
243− (\r -> r { hour = Just (show hour)
244− , minute = Just (show minute)
245− }
246− ) defaultComponentRecord
test/Test/Main.purs+2−3
@@ -12,8 +12,7 @@ import Data.Foldable (intercalate)
1212import Data.Foreign (F, renderForeignError)
1313import Data.Generic.Rep (class Generic)
1414import Data.Intl.DateTimeFormat (DateTimeFormatOptions(DateTimeFormatOptions), DateTimeFormatOptions', HourMinute(HourMinute), HourMinuteSecond(HourMinuteSecond), LocalesOption, MonthDay(MonthDay), MonthRep(MonthTwoDigit, MonthNumeric, MonthNarrow, MonthShort, MonthLong), NumericRep(Numeric, TwoDigit), ResolvedOptions(..), StringRep(Short, Long), TimeZone(TimeZone), WeekdayYearMonthDay(WeekdayYearMonthDay), WeekdayYearMonthDayHourMinuteSecond(WeekdayYearMonthDayHourMinuteSecond), YearMonth(YearMonth), YearMonthDay(YearMonthDay), createDateTimeFormat, formatJSDate, resolvedOptions, supportedLocalesOf)
15−import Data.Intl.DateTimeFormat.Class (class FormatComponent, FormatComponentRecord(..))
16−import Data.Intl.DateTimeFormat.Generic (genericFormatComponent)
15+import Data.Intl.DateTimeFormat.Generic (class FormatComponent, genericFormatComponent)
1716import Data.JSDate (JSDate, fromDateTime)
1817import Data.Maybe (Maybe(..), isJust, isNothing)
1918import Data.Symbol (SProxy(..))
@@ -37,7 +36,7 @@ instance formatComponentEraYear :: FormatComponent EraYear where
3736newtype Era = Era StringRep
3837
3938instance formatComponentEra :: FormatComponent Era where
40− formatComponent (Era r) = FormatComponentRecord
39+ formatComponent (Era r) =
4140 { era: Just (show r)
4241 , weekday: Nothing
4342 , year: Nothing