а, я понял. проблема функтора в том, что когда ты юзаешь его на стрелку клейсли, то у тебя на выходе будет f (f a). Фримонада позволяет работать с любым количеством слоёв как будто тебя один слой, но при этом каждый новый бинд будет добавлять слой :D А как эти слои раскрывать потом?..
Надо писать интерпретатор 😁 Для одной и той же фри монады, можно написать несколько разных интерпретаторов, что здорово. Т.е. программа отделена от интерпретации.
хз по теме чата или нет, но как типизируют паттерны? если оперировать паттерном как объектом первого класса, то какой у него будет тип? допустим f :: [a] -> a; f (x :: xs) = x, тогда какой тип у паттерна x :: xs? 1/((x :: a) -> (xs :: [a]) -> [a])?
у призм и паттернов изоморфизм, я где-то сильно выше писал фигню, которая позволяет использовать любую призму в патмаче, а любой паттерн в призме и так делается тривиально