Испытал экстаз от того, как красиво и элегантно в persistent пишется функция, которая инсертит запись в таблицу, если там такой ещё нет, и возвращает id записи (либо новой, либо найденной):
insertLanguage language = do
let lang = Language language
entity <- getByValue lang
case entity of
Nothing -> do insert lang
Just e -> return $ entityKey e
Пять строк, пять строк! И не какого-то там мозговыносящего матана с функторами, а нечто такое, что питонист, взглянувший на это, просто подумает: «о, в третий питон ещё и стрелочки какие-то впилили, прикольно».
Тот факт, что insert
возвращает id созданной записи, ранее было поводом отдельного экстаза.