diff --git a/src/fp/index.js.flow b/src/fp/index.js.flow
new file mode 100644
index 0000000000..0018e8d89e
--- /dev/null
+++ b/src/fp/index.js.flow
@@ -0,0 +1,335 @@
+// @flow
+// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
+
+type Interval = {
+ start: Date | string | number,
+ end: Date | string | number
+}
+
+type Options = {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
+ additionalDigits?: 0 | 1 | 2,
+ locale?: Locale,
+ includeSeconds?: boolean,
+ addSuffix?: boolean,
+ unit?: 's' | 'm' | 'h' | 'd' | 'M' | 'Y',
+ roundingMethod?: 'floor' | 'ceil' | 'round'
+}
+
+type Locale = {
+ formatDistance: Function,
+ formatLong: Function,
+ formatRelative: Function,
+ localize: {
+ ordinalNumber: Function,
+ weekday: Function,
+ weekdays: Function,
+ month: Function,
+ months: Function,
+ timeOfDay: Function,
+ timesOfDay: Function
+ },
+ match: {
+ ordinalNumbers: Function,
+ ordinalNumber: Function,
+ weekdays: Function,
+ weekday: Function,
+ months: Function,
+ month: Function,
+ timesOfDay: Function,
+ timeOfDay: Function
+ },
+ formatters?: Object,
+ formattingTokensRegExp?: RegExp,
+ units?: Object,
+ parsers?: Object,
+ parsingTokensRegExp?: RegExp,
+ options?: {
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6
+ }
+}
+
+type CurriedFn1 = (a: A) => R
+
+type CurriedFn2 = (a: A) => CurriedFn1
+ | (a: A, b: B) => R
+
+type CurriedFn3 = (a: A) => CurriedFn2
+ | (a: A, b: B) => CurriedFn1
+ | (a: A, b: B, c: C) => R
+
+type CurriedFn4 = (a: A) => CurriedFn3
+ | (a: A, b: B) => CurriedFn2
+ | (a: A, b: B, c: C) => CurriedFn1
+ | (a: A, b: B, c: C, d: D) => R
+
+declare module.exports: {
+ addDays: CurriedFn2,
+ addDaysWithOptions: CurriedFn3,
+ addHours: CurriedFn2,
+ addHoursWithOptions: CurriedFn3,
+ addISOYears: CurriedFn2,
+ addISOYearsWithOptions: CurriedFn3,
+ addMilliseconds: CurriedFn2,
+ addMillisecondsWithOptions: CurriedFn3,
+ addMinutes: CurriedFn2,
+ addMinutesWithOptions: CurriedFn3,
+ addMonths: CurriedFn2,
+ addMonthsWithOptions: CurriedFn3,
+ addQuarters: CurriedFn2,
+ addQuartersWithOptions: CurriedFn3,
+ addSeconds: CurriedFn2,
+ addSecondsWithOptions: CurriedFn3,
+ addWeeks: CurriedFn2,
+ addWeeksWithOptions: CurriedFn3,
+ addYears: CurriedFn2,
+ addYearsWithOptions: CurriedFn3,
+ areIntervalsOverlapping: CurriedFn2,
+ areIntervalsOverlappingWithOptions: CurriedFn3,
+ closestIndexTo: CurriedFn2<(Date | string | number)[], Date | string | number, number>,
+ closestIndexToWithOptions: CurriedFn3,
+ closestTo: CurriedFn2<(Date | string | number)[], Date | string | number, Date>,
+ closestToWithOptions: CurriedFn3,
+ compareAsc: CurriedFn2,
+ compareAscWithOptions: CurriedFn3,
+ compareDesc: CurriedFn2,
+ compareDescWithOptions: CurriedFn3,
+ differenceInCalendarDays: CurriedFn2,
+ differenceInCalendarDaysWithOptions: CurriedFn3,
+ differenceInCalendarISOWeeks: CurriedFn2,
+ differenceInCalendarISOWeeksWithOptions: CurriedFn3,
+ differenceInCalendarISOYears: CurriedFn2,
+ differenceInCalendarISOYearsWithOptions: CurriedFn3,
+ differenceInCalendarMonths: CurriedFn2,
+ differenceInCalendarMonthsWithOptions: CurriedFn3,
+ differenceInCalendarQuarters: CurriedFn2,
+ differenceInCalendarQuartersWithOptions: CurriedFn3,
+ differenceInCalendarWeeks: CurriedFn2,
+ differenceInCalendarWeeksWithOptions: CurriedFn3,
+ differenceInCalendarYears: CurriedFn2,
+ differenceInCalendarYearsWithOptions: CurriedFn3,
+ differenceInDays: CurriedFn2,
+ differenceInDaysWithOptions: CurriedFn3,
+ differenceInHours: CurriedFn2,
+ differenceInHoursWithOptions: CurriedFn3,
+ differenceInISOYears: CurriedFn2,
+ differenceInISOYearsWithOptions: CurriedFn3,
+ differenceInMilliseconds: CurriedFn2,
+ differenceInMillisecondsWithOptions: CurriedFn3,
+ differenceInMinutes: CurriedFn2,
+ differenceInMinutesWithOptions: CurriedFn3,
+ differenceInMonths: CurriedFn2,
+ differenceInMonthsWithOptions: CurriedFn3,
+ differenceInQuarters: CurriedFn2,
+ differenceInQuartersWithOptions: CurriedFn3,
+ differenceInSeconds: CurriedFn2,
+ differenceInSecondsWithOptions: CurriedFn3,
+ differenceInWeeks: CurriedFn2,
+ differenceInWeeksWithOptions: CurriedFn3,
+ differenceInYears: CurriedFn2,
+ differenceInYearsWithOptions: CurriedFn3,
+ eachDayOfInterval: CurriedFn1,
+ eachDayOfIntervalWithOptions: CurriedFn2,
+ endOfDay: CurriedFn1,
+ endOfDayWithOptions: CurriedFn2,
+ endOfHour: CurriedFn1,
+ endOfHourWithOptions: CurriedFn2,
+ endOfISOWeek: CurriedFn1,
+ endOfISOWeekWithOptions: CurriedFn2,
+ endOfISOYear: CurriedFn1,
+ endOfISOYearWithOptions: CurriedFn2,
+ endOfMinute: CurriedFn1,
+ endOfMinuteWithOptions: CurriedFn2,
+ endOfMonth: CurriedFn1,
+ endOfMonthWithOptions: CurriedFn2,
+ endOfQuarter: CurriedFn1,
+ endOfQuarterWithOptions: CurriedFn2,
+ endOfSecond: CurriedFn1,
+ endOfSecondWithOptions: CurriedFn2,
+ endOfWeek: CurriedFn1,
+ endOfWeekWithOptions: CurriedFn2,
+ endOfYear: CurriedFn1,
+ endOfYearWithOptions: CurriedFn2,
+ format: CurriedFn2,
+ formatDistance: CurriedFn2,
+ formatDistanceStrict: CurriedFn2,
+ formatDistanceStrictWithOptions: CurriedFn3,
+ formatDistanceWithOptions: CurriedFn3,
+ formatRelative: CurriedFn2,
+ formatRelativeWithOptions: CurriedFn3,
+ formatWithOptions: CurriedFn3,
+ getDate: CurriedFn1,
+ getDateWithOptions: CurriedFn2,
+ getDay: CurriedFn1,
+ getDayOfYear: CurriedFn1,
+ getDayOfYearWithOptions: CurriedFn2,
+ getDaysInMonth: CurriedFn1,
+ getDaysInMonthWithOptions: CurriedFn2,
+ getDaysInYear: CurriedFn1,
+ getDaysInYearWithOptions: CurriedFn2,
+ getDayWithOptions: CurriedFn2,
+ getHours: CurriedFn1,
+ getHoursWithOptions: CurriedFn2,
+ getISODay: CurriedFn1,
+ getISODayWithOptions: CurriedFn2,
+ getISOWeek: CurriedFn1,
+ getISOWeeksInYear: CurriedFn1,
+ getISOWeeksInYearWithOptions: CurriedFn2,
+ getISOWeekWithOptions: CurriedFn2,
+ getISOYear: CurriedFn1,
+ getISOYearWithOptions: CurriedFn2,
+ getMilliseconds: CurriedFn1,
+ getMillisecondsWithOptions: CurriedFn2,
+ getMinutes: CurriedFn1,
+ getMinutesWithOptions: CurriedFn2,
+ getMonth: CurriedFn1,
+ getMonthWithOptions: CurriedFn2,
+ getOverlappingDaysInIntervals: CurriedFn2,
+ getOverlappingDaysInIntervalsWithOptions: CurriedFn3,
+ getQuarter: CurriedFn1,
+ getQuarterWithOptions: CurriedFn2,
+ getSeconds: CurriedFn1,
+ getSecondsWithOptions: CurriedFn2,
+ getTime: CurriedFn1,
+ getTimeWithOptions: CurriedFn2,
+ getYear: CurriedFn1,
+ getYearWithOptions: CurriedFn2,
+ isAfter: CurriedFn2,
+ isAfterWithOptions: CurriedFn3,
+ isBefore: CurriedFn2,
+ isBeforeWithOptions: CurriedFn3,
+ isEqual: CurriedFn2,
+ isEqualWithOptions: CurriedFn3,
+ isFirstDayOfMonth: CurriedFn1,
+ isFirstDayOfMonthWithOptions: CurriedFn2,
+ isFriday: CurriedFn1,
+ isFridayWithOptions: CurriedFn2,
+ isLastDayOfMonth: CurriedFn1,
+ isLastDayOfMonthWithOptions: CurriedFn2,
+ isLeapYear: CurriedFn1,
+ isLeapYearWithOptions: CurriedFn2,
+ isMonday: CurriedFn1,
+ isMondayWithOptions: CurriedFn2,
+ isSameDay: CurriedFn2,
+ isSameDayWithOptions: CurriedFn3,
+ isSameHour: CurriedFn2,
+ isSameHourWithOptions: CurriedFn3,
+ isSameISOWeek: CurriedFn2,
+ isSameISOWeekWithOptions: CurriedFn3,
+ isSameISOYear: CurriedFn2,
+ isSameISOYearWithOptions: CurriedFn3,
+ isSameMinute: CurriedFn2,
+ isSameMinuteWithOptions: CurriedFn3,
+ isSameMonth: CurriedFn2,
+ isSameMonthWithOptions: CurriedFn3,
+ isSameQuarter: CurriedFn2,
+ isSameQuarterWithOptions: CurriedFn3,
+ isSameSecond: CurriedFn2,
+ isSameSecondWithOptions: CurriedFn3,
+ isSameWeek: CurriedFn2,
+ isSameWeekWithOptions: CurriedFn3,
+ isSameYear: CurriedFn2,
+ isSameYearWithOptions: CurriedFn3,
+ isSaturday: CurriedFn1,
+ isSaturdayWithOptions: CurriedFn2,
+ isSunday: CurriedFn1,
+ isSundayWithOptions: CurriedFn2,
+ isThursday: CurriedFn1,
+ isThursdayWithOptions: CurriedFn2,
+ isTuesday: CurriedFn1,
+ isTuesdayWithOptions: CurriedFn2,
+ isValid: CurriedFn1,
+ isValidWithOptions: CurriedFn2,
+ isWednesday: CurriedFn1,
+ isWednesdayWithOptions: CurriedFn2,
+ isWeekend: CurriedFn1,
+ isWeekendWithOptions: CurriedFn2,
+ isWithinInterval: CurriedFn2,
+ isWithinIntervalWithOptions: CurriedFn3,
+ lastDayOfISOWeek: CurriedFn1,
+ lastDayOfISOWeekWithOptions: CurriedFn2,
+ lastDayOfISOYear: CurriedFn1,
+ lastDayOfISOYearWithOptions: CurriedFn2,
+ lastDayOfMonth: CurriedFn1,
+ lastDayOfMonthWithOptions: CurriedFn2,
+ lastDayOfQuarter: CurriedFn1,
+ lastDayOfQuarterWithOptions: CurriedFn2,
+ lastDayOfWeek: CurriedFn1,
+ lastDayOfWeekWithOptions: CurriedFn2,
+ lastDayOfYear: CurriedFn1,
+ lastDayOfYearWithOptions: CurriedFn2,
+ max: CurriedFn1<(Date | string | number)[], Date>,
+ maxWithOptions: CurriedFn2,
+ min: CurriedFn1<(Date | string | number)[], Date>,
+ minWithOptions: CurriedFn2,
+ parse: CurriedFn3,
+ parseWithOptions: CurriedFn4,
+ setDate: CurriedFn2,
+ setDateWithOptions: CurriedFn3,
+ setDay: CurriedFn2,
+ setDayOfYear: CurriedFn2,
+ setDayOfYearWithOptions: CurriedFn3,
+ setDayWithOptions: CurriedFn3,
+ setHours: CurriedFn2,
+ setHoursWithOptions: CurriedFn3,
+ setISODay: CurriedFn2,
+ setISODayWithOptions: CurriedFn3,
+ setISOWeek: CurriedFn2,
+ setISOWeekWithOptions: CurriedFn3,
+ setISOYear: CurriedFn2,
+ setISOYearWithOptions: CurriedFn3,
+ setMilliseconds: CurriedFn2,
+ setMillisecondsWithOptions: CurriedFn3,
+ setMinutes: CurriedFn2,
+ setMinutesWithOptions: CurriedFn3,
+ setMonth: CurriedFn2,
+ setMonthWithOptions: CurriedFn3,
+ setQuarter: CurriedFn2,
+ setQuarterWithOptions: CurriedFn3,
+ setSeconds: CurriedFn2,
+ setSecondsWithOptions: CurriedFn3,
+ setYear: CurriedFn2,
+ setYearWithOptions: CurriedFn3,
+ startOfDay: CurriedFn1,
+ startOfDayWithOptions: CurriedFn2,
+ startOfHour: CurriedFn1,
+ startOfHourWithOptions: CurriedFn2,
+ startOfISOWeek: CurriedFn1,
+ startOfISOWeekWithOptions: CurriedFn2,
+ startOfISOYear: CurriedFn1,
+ startOfISOYearWithOptions: CurriedFn2,
+ startOfMinute: CurriedFn1,
+ startOfMinuteWithOptions: CurriedFn2,
+ startOfMonth: CurriedFn1,
+ startOfMonthWithOptions: CurriedFn2,
+ startOfQuarter: CurriedFn1,
+ startOfQuarterWithOptions: CurriedFn2,
+ startOfSecond: CurriedFn1,
+ startOfSecondWithOptions: CurriedFn2,
+ startOfWeek: CurriedFn1,
+ startOfWeekWithOptions: CurriedFn2,
+ startOfYear: CurriedFn1,
+ startOfYearWithOptions: CurriedFn2