Если вас устраивает просто сбой, когда год и / или день выходят за пределы допустимого диапазона (решение, которое я настоятельно призываю вас переосмыслить), тогда вы можете использовать fromJust
(что является частичнымфункция) вместе с unsafePartial
, чтобы скрыть пристрастность:
makeDate :: Int -> Month -> Int -> Date
makeDate year month day =
unsafePartial $ fromJust $
canonicalDate <$> toEnum year <@> month <*> toEnum day
Кроме того, вы можете не скрывать пристрастность:
partialMakeDate :: Partial => Int -> Month -> Int -> Date
partialMakeDate year month day =
fromJust $
canonicalDate <$> toEnum year <@> month <*> toEnum day
Таким образом,по крайней мере ваши потребители будут знать, что функция действительно частичная.