Haskell

Программные средства разработки

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Haskell

Непрочитанное сообщение Olej » 19 фев 2014, 18:42

Ещё один стандартизованный чисто функциональный язык - Haskell.

Одна из доступных из репозитариев реализация Haskell под Linux - GHC:

Код: Выделить всё

    $ yum list ghc
    Доступные пакеты
    ghc.i686                       7.6.3-18.3.fc20                                           updates
    $ sudo yum install ghc
    ...
    Установить  1 пакет (+47 зависимых)
    Объем загрузки: 82 M
    Объем изменений: 610 M
    ...
    Установлено:
      ghc.i686 0:7.6.3-18.3.fc20
    $ ghc --version
    The Glorious Glasgow Haskell Compilation System, version 7.6.3
Как видите, объём изменений эта инсталляция потянет значительный.

В качестве проверки работоспособности того, что получилось, можете использовать приложение (там же показаны способы комментирования):

Код: Выделить всё

module Main where
import System.Environment

main :: IO ()

-- сама программа
main = do
     args <- getArgs  {- вложенный комментарий -}
     putStrLn( "Привет от Haskell, " ++ args !! 0 )

Код: Выделить всё

bash-4.2$ ghc -o hello_hs hello_hs.hs
[1 of 1] Compiling Main             ( hello_hs.hs, hello_hs.o )
Linking hello_hs ...
bash-4.2$ ./hello_hs Вася
Привет от Haskell, Вася

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 19 фев 2014, 18:47

Olej писал(а):Ещё один стандартизованный чисто функциональный язык - Haskell.
Описаний и статей много ... но они какие-то бестолковые :-o :

Haskell
Язык Haskell: О пользе и вреде лени
Язык и библиотеки Haskell 98
Haskell 2010. Language Report

Но чтобы начать писать приложения на Haskell - этого достаточно (здесь и описание языка, и его библиотеки...)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 09 мар 2014, 12:30

Olej писал(а):Описаний и статей много ... но они какие-то бестолковые :-o :
По Haskell только-только выложена автором очень классная книга (PDF, очень советую скачать пока лежит ;-) ):
Денис Шевченко
О Haskell по-человечески для обыкновенных программистов
март 2014
В частности, в отношении Haskell бытует мнение о чрезвычайной, пря­мо-таки фантастической сложности его освоения. И всё-таки я повторю: в этом
языке меня поразила его простота. Но простота эта особенная, и скоро вы пой­мёте, что я имею в виду.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 09 мар 2014, 15:54

Olej писал(а): По Haskell только-только выложена автором очень классная книга (PDF, очень советую скачать пока лежит ;-) ):
Денис Шевченко
О Haskell по-человечески для обыкновенных программистов
март 2014
Давно имел намерение сесть посерьёзнее разобраться с Haskell. Теперь есть возможность и желание.

Код: Выделить всё

bash-4.2$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.6.3
Можно, конечно, (и достаточно) всё компилировать вручную, типа:

Код: Выделить всё

bash-4.2$ ghc -o hello_hs hello_hs.hs
[1 of 1] Compiling Main             ( hello_hs.hs, hello_hs.o )
Linking hello_hs ...
bash-4.2$ ./hello_hs Вася
Привет от Haskell, Вася
(кстати, сразу убеждаемся, что Haskell, похоже, замечательно справляется с Unicode UTF-8, чего не скажешь про некоторые другие языки).

В пакете устанавливается и диалоговый интерпретатор:

Код: Выделить всё

[root@localhost haskell]# ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 2+2
4
Prelude> ^D
Leaving GHCi.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 09 мар 2014, 22:55

Olej писал(а): Можно, конечно, (и достаточно) всё компилировать вручную, типа:

Код: Выделить всё

bash-4.2$ ghc -o hello_hs hello_hs.hs
[1 of 1] Compiling Main             ( hello_hs.hs, hello_hs.o )
Linking hello_hs ...
bash-4.2$ ./hello_hs Вася
Привет от Haskell, Вася
Но Haskell — это целая своеобразная технология, и обидно не использовать все возможности этой технологии, а делать ручную компиляцию...
В этой технологии есть ещё такая штука как cabal (Common Architecture for Building Applications and Libraries). Говорят, что это нечто типа make в мире C/C++ (я бы сравнил скорее с Cmake) — построитель проектов Haskell.
Но cabal придётся устанавливать отдельно:

Код: Выделить всё

$ yum list cabal*
Загружены модули: langpacks, refresh-packagekit
Доступные пакеты
cabal-dev.i686                     0.9.2-2.fc20                                      fedora
cabal-install.i686                 1.16.0.2-27.fc20                                  updates
cabal-rpm.i686                     0.8.7-1.fc20                                      updates
$ sudo yum install cabal*
...
Установить  3 пакета (+13 зависимых)
Объем загрузки: 1.7 M
Объем изменений: 9.1 M
...
Выполнено!
Кроме того, что это инструмент построения собственных модульных проектов, это мощнейшее средство управления модулями (библиотеками) Haskell :

Код: Выделить всё

$ cabal --help
...
Commands:
  install      Installs a list of packages.
  update       Updates list of known packages
  list         List packages matching a search string.
  info         Display detailed information about a particular package.
  fetch        Downloads packages for later installation.
  unpack       Unpacks packages for user inspection.
  check        Check the package for common mistakes
  sdist        Generate a source distribution file (.tar.gz).
  upload       Uploads source packages to Hackage
  report       Upload build reports to a remote server.
  init         Interactively create a .cabal file.
  configure    Prepare to build the package.
  build        Make this package ready for installation.
  copy         Copy the files into the install locations.
  haddock      Generate Haddock HTML documentation.
  clean        Clean up after a build.
  hscolour     Generate HsColour colourised code, in HTML format.
  register     Register this package with the compiler.
  test         Run the test suite, if any (configure with UserHooks).
  bench        Run the benchmark, if any (configure with UserHooks).
  upgrade      (command disabled, use install instead)
  help         Help about commands
...

Код: Выделить всё

$ cabal update
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
С помощью cabal можто найти, выбрать и установить любой модуль (библиотеку) из главного мирового репозитория Haskell (его называют Hackage):

Код: Выделить всё

$ cabal list complex
* complex-generic
    Synopsis: complex numbers with non-mandatory RealFloat
    Default available version: 0.1.1
    Installed versions: [ Not installed ]
    Homepage: https://gitorious.org/complex-generic
    License:  BSD3

* complex-integrate
    Synopsis: A simple integration function to integrate a complex-valued
              complex functions
    Default available version: 1.0.0
    Installed versions: [ Not installed ]
    Homepage: https://github.com/hijarian/complex-integrate
    License:  PublicDomain

* complexity
    Synopsis: Empirical algorithmic complexity
    Default available version: 0.1.3
    Installed versions: [ Not installed ]
    License:  BSD3

* storable-complex
    Synopsis: Storable instance for Complex
    Default available version: 0.2.1
    Installed versions: [ Not installed ]
    License:  BSD3
Библиотека Haskell очень обширна (1-я команда выведет полный листинг библиотеки):

Код: Выделить всё

$ cabal list >> cabal.lst
$ ls -l cabal.lst 
-rw-rw-r--. 1 Olej Olej 1273606 мар  9 11:40 cabal.lst
$ wc -l cabal.lst 
41520 cabal.lst
Учитывая, что информация о каждом модуле выводится в 6 строк (см. выше) — это даёт объём библиотеки в 6920 единиц компиляции.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 14 мар 2014, 11:57

Olej писал(а): (кстати, сразу убеждаемся, что Haskell, похоже, замечательно справляется с Unicode UTF-8, чего не скажешь про некоторые другие языки).
Писать на Haskell, и даже поверхностно воспринимать написанное, с непривычки - трудно.
Кое-что, относительно написания небольшого приложения на Haskell - обсуждается здесь: сравнение языков программирования.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 02 сен 2014, 14:47

Haskell support for Eclipse

Last Updated 2014-07-22
We extend the Eclipse IDE with tools for development in Haskell, ...
Сайт: EclipseFP The Haskell plug-in for Eclipse
If you want to try EclipseFP follow the installation instructions.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 17 фев 2017, 21:14

Решение ООП-задач на языке Haskell
Как-то однажды знаменитый учитель Кх Ан вышел на прогулку с учеником Антоном. Надеясь разговорить учителя, Антон спросил: «Учитель, слыхал я, что объекты — очень хорошая штука — правда ли это?» Кх Ан посмотрел на ученика с жалостью в красных от боли глазах и ответил: «Глупый ученик! Объекты — всего лишь замыкания для бедных.»

Пристыженный Антон простился с учителем и вернулся в свою келью, горя желанием как можно скорее изучить замыкания. Он внимательно прочитал все статьи из серии «Lambda: The Ultimate», и родственные им статьи, и написал небольшой интерпретатор Scheme с объектно-ориентированной системой, основанной на замыканиях. Он многому научился, и с нетерпением ждал случая сообщить учителю о своих успехах.

Во время следующей прогулки с Кх Аном, Антон, пытаясь произвести хорошее впечатление, сказал: «Учитель, я прилежно изучил этот вопрос, и понимаю теперь, что объекты — воистину замыкания для бедных.» В ответ Кх Ан яростно огрел Антона палкой и воскликнул: «Когда же ты чему-то научишься, бездарь? Замыкания — это объекты для бедных!»

В эту же секунду Антон обрел просветление.
:lol:
Дальше там почитаете...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Haskell

Непрочитанное сообщение Olej » 27 окт 2018, 13:42

Olej писал(а): Описаний и статей много ... но они какие-то бестолковые :-o :
По Haskell мало хороших описаний. Поэтому особо нужно отметить:
photo_2018-10-27_13-39-35.jpg
Книгу можете свободно скачать здесь (Telegram) : https://t.me/itliba/858

Ответить

Вернуться в «Инструменты программирования»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость