История изменений
Исправление
dave,
(текущая версия)
:
На haskell сложновато (точнее, невозможно) писать императивный код. Иногда нужно. =)
В некоторых учебниках такую фигню могут написать, и где-то я такое даже вроде бы видел. На деле проблем не заметил. Когда нужны были эффективные heap-based priority queue и простой вектор в стиле С++ с возможность двоичного поиска, то я без проблем использовал монаду IO. Чуть многословнее из-за IORef и массивов, но это было единственной проблемой. По скорости код не уступал аналогичному коду на F# и Scala, а, вероятно, даже превосходил, который в свою очередь был очень близок к коду на C# и Java соответственно (примерно зная как первые транслируются во вторые).
Более того, не так просто отделить, где функциональный код, где императивный, а где декларативный. Это всего лишь ярлыки. Хаскель интересен тем, что там все это можно использовать вместе. Впрочем, в Common Lisp - тоже при должном умении. Скажу по секрету, даже в C# иногда.
Исходная версия
dave,
:
На haskell сложновато (точнее, невозможно) писать императивный код. Иногда нужно. =)
В некоторых учебниках такую фигню могут написать, и где-то я такое даже вроде бы видел. На деле проблем не заметил. Когда нужны были эффективные heap-based priority queue и простой вектор в стиле С++, то я без проблем использовал монаду IO. Чуть многословнее из-за IORef, но это было единственной проблемой. По скорости код не уступал аналогичному коду на F# и Scala, а, вероятно, даже превосходил, который в свою очередь был очень близок к коду на C# и Java соответственно (примерно зная как первые транслируются во вторые).
Более того, не так просто отделить, где функциональный код, где императивный, а где декларативный. Это всего лишь ярлыки. Хаскель интересен тем, что там все это можно использовать вместе. Впрочем, в Common Lisp - тоже при должном умении. Скажу по секрету, даже в C# иногда.