JSStatement -> [Constr]
fn = everything (++) ([], const [] `extQ` (\x -> [toConstr (x :: JSStatement)]))
No instance for (Data.Generics.Uniplate.Operations.Biplate
JSStatement b0)
arising from a use of 'everything'
А зачем тут такой инстанс?
Если же пробовать прям точно, как в ответе, то будет несоответствие типов:
fn :: JSStatement -> [Constr]
fn = everything (++) (const [] `extQ` (\x -> [toConstr (x :: JSStatement)]))
Couldn't match expected type `([Constr], a0 -> [Constr])'
with actual type `b0 -> [Constr]'
Может, там какой-то другой `everything`
Так, не тот everything использовал. Тот в Data.Generics.Schemes. @A64m_qb0 , вот вариант без райтера: fn :: JSStatement -> [Constr] fn = everything (++) (const [] `extQ` (\x -> [toConstr (x :: JSStatement)])) По-моему, он лучше, потому что короче и нет лишней операции. Или тут есть какой-то подвох, о котором я не знаю? (Как советует автор, лучше бы, конечно, использовать Map вместо списка. Так и сделаю)
Обсуждают сегодня