Я видел много разговоров/читал сообщения в блогах, что у вас должны быть строгие поля в data
, чтобы избежать различных проблем с производительностью, например:
data Person = Person
{ personName :: !Text
, personBirthday :: !UTCTime
}
Это имеет для меня общий смысл. Поскольку функции, работающие над этими данными, ленивы, композиция не жертвует.
Но если я добавлю поле Maybe
:
data Person = Person
{ personName :: !Text
, personBirthday :: !UTCTime
, personAddress :: !(Maybe Address)
}
Я вношу ленивость в структуру данных, ведь Maybe
- это структура управления. Не удается ли ununaluated thunk скрываться за конструктором Just
?
Тем не менее, strict Maybe
в strict
или через strict-base-types
. Но в соответствии с обратными зависимостями (strict, strict-base-types) они широко не используются.
Итак, вопрос: почему нужно или не следует использовать строгие Maybe
в определениях неконтролируемых данных?