Dmitry Astapov (_adept_) wrote in ru_lambda,
Dmitry Astapov
_adept_
ru_lambda

Category:

Stranger in a strange land: привычки от Haskell в стране OCaml

Я тут подумал, что с тех пор, как я читал книжку про OCaml и пытался что-то на нем писать, прошло уже прилично лет, и можно было бы попробовать сделать из себя "окамло-читателя" какого-никакого "окамло-писателя". Пост, конечно, слегка офф-топик, но я решил, что напишу его именно сюда, чтобы была возможность не объяснять привычки и идиомы "из Haskell" и рассчитывать, что читатели меня поймут.

Итак, я взял какой-то игрушечный пример и попробовал переписать его с Haskell на OCaml, используя http://caml.inria.fr/pub/docs/manual-ocaml/libref/ в качестве справочника. В первые же пять минут мне пришлось самому написать dropWhile и takeWhile. . Кроме того мне понадобился аналог zipWith, который не кидается exception-ами, если ему дали списки разной длины (я ж правильно понимаю, что нет возможности перехватить такое исключение и сказать "обработали, что есть, и довольно"?). Ну и еще 2-3-10 велосипедов разной степени велосипедности.

Я в такой ситуации всегда склонен считать, что это я дурак, и не знаю, за какой конец брать правильные инструменты. Не могли бы благородные доны, знающие и Haskell, и OCaml, подсказать мне:

1)Есть ли аналог :browse и :info в ghci, чтобы порыться в доступных библиотеках, не зная названий нужных тебе модулей и функций?
Что советуют: module Asd = List ;; вывалит интерфейс модуля. Еще можно смотреть глазами в .mli. Еще есть ocamlbrowser.

2)Что используется вместо cabal build? Ocamlfind или что-то другое? Есть ли возможность при интерактивной разработке не делать #load "str.cma" руками?
Что советуют: oasis, ocamlfind, GODI. Для ocaml toplevel можно написать init-скрипт. Или сделать custom toplevel.

3)Есть ли аналог hoogle? Как вообще решаются задачи "пойди туда, не знаю, куда, и найди функции, которая по предикату и списку дают другой список?"
Что советуют: ничего

4)Что есть аналогом hackage?
Что советуют: oasis-db. Еще смотреть на http://caml.inria.fr//cgi-bin/hump.en.cgi

5)Где живут библиотеки для работы со списками и прочими "базовыми" структурами данных, более богатые, чем стандартные?
Что советуют: extlib, janest-core, batteries

6)Как называются must-know инструменты (анало для haskell: ghc, cabal, threadscope, haddock, ...)?
Что советуют: menhir, camlp4

UPD: повписывал в пост текущие советы из других источников.
Tags: haskell, ocaml
Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 82 comments