Большая часть кода Haskell, который я вижу, использует прямые структуры, такие как списки и деревья. Например, он является общим для Haskeller написать:Каков эквивалент модулей OCaml в Haskell?
fillRect :: Color → Bounds → Image → Image
Эта модель имеет проблему: если в дальнейшем программисте решает изменить определение «Image», или использовать другую структуру данных, то он будет необходимо рефактор каждый единый код используя. В OCaml вы можете просто использовать модуль, определяющий интерфейс к изображению, а затем принять решение о конкретных реализациях позже.
Что такое альтернатива Haskell для модулей OCaml?
Как эта подпись типа означает, что 'fillRect' использует (или даже имеет доступ к) сведения о реализации типа' Image'? Как бы вы пишете эту подпись по-разному в OCaml (кроме очевидных синтаксических различий и разных соглашений об именах)? – sepp2k
[Это аналог Haskell] (http://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/) того, что вы описываете. Это не так сильно, как модули Ocaml (по крайней мере, не без большого количества расширений), но он охватывает наиболее распространенные случаи использования. Просто сделайте запись функций полиморфными по типу, который поддерживает эти операции. –
Рюкзак - это попытка получить какую-то форму модуля в Haskell - http://plv.mpi-sws.org/backpack/ – nlucaroni