Давайте посмотрим на следующий код:Обеспечение того типа Haskell А содержит элемент типа B
transformBi (++"asdasd") [1,2,3,4]
Очевидно, что этот код ничего не делает, но он по-прежнему отлично компилируется. Я хотел бы создать новую версию transformBi, которая не будет компилироваться, если компилятор может доказать по типам, что это не-op. В идеале, это будет сделано в класс типов под названием Contains
, так что тип нового transformBi
будет
transformBi :: (Biplate from to, Contains from to) => (to -> to) -> from -> from
Как мы реализуем Contains
?
Я ищу Contains
, который может быть автоматически получен, а не для чего-то, что я должен написать для каждого типа алгебраических данных.
Под «не будет работать», вы имеете в виду «не скомпилировать»? –
Да, я отредактирую. – tohava