505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
||||||
1 | ||||||
Haskell и -fno-warn-type-defaults29.12.2014, 14:32. Показов 3200. Ответов 34
Метки нет (Все метки)
Недавно начал изучать Haskell, пользуюсь связкой emacs + haskell-mode + company-ghc + shm.
В Dispersion.cabal прописаны флаги: -O2 -Wall Возникла следующая ситуация, которая не дает мне покоя : допустим, я пишу такой простой код:
Как я понял здесь имеется ввиду, что Haskell будет использовать тип Integer по умолчанию или что-то типа того. Такие предупреждения немного поднадоели, как решить проблему? Нашел 2 способа: 1) Прописать явно типы ==> скрин2 2) Использовать флаг -fno-warn-type-defaults ==> скрин3 2 Вопроса: Как правильно бороться с такими надоедливыми предупреждениями, 1-м способом или 2-м? Куда лучше прописывать флаги, в Dispersion.cabal или все-таки в каждый модуль отдельно?
0
|
29.12.2014, 14:32 | |
Ответы с готовыми решениями:
34
Работа с type в haskell Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?) Warning: return type defaults to ‘int’ Что значит этот варнинг? Log4j:WARN |
Модератор
|
||||||
09.01.2015, 14:36 | 21 | |||||
smoke853, Вроде, сделал как Вы сказали. Чтобы поставить ghc-mod пришлось опять переустанавливать ghc ("cabal hell", чтоб его). Отличия: emacs у меня х32, потому что такая винда. emacs понадобилось указывать в PATH, иначе на этапе curl -L http://git.io/epre | sh ругается что emacs не найден и нельзя отбайткодить.
Вроде - бы, остальное тоже, но в результате и даже не было подсветки в файлах hs. Опять же "И вот эту папку нужно скопировать в .emacs.d" - содержимое папки в уорень .emacs.d или папку elisp внутрь папки .emacs.d ? Дописал в .emacs
Копирование через ^C ^V наверное, тут можно настроить, но его изучать и изучать ... Практически, на чём прошлый раз начал, то и получил, не продвинулся. Мда, может под linux всё здорово, но под вин нет нормального IDE для Haskell. Не по теме: leksah требует Gtk2, хотя уже давно есть GTk3, и даже оно указано в описании пакета. И, вообще, при его установки сообщения дичайшие, типа начинает качать и ставить gtk3 той же версии что уже установлена и валится потому что "такой файл уже есть". Прискучили мне эти инсталляции в стиле слаки. Или вернусь к громоздкому эклипсу или обойдусь Notepad++ + WinGHCi + HLint. Жалко что контекстных подсказок нет нигде.
0
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
|
09.01.2015, 14:47 [ТС] | 22 |
Как нет, когда есть emacs
ничего дописывать не нужно. Сейчас распишу, более подробно
1
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
||||||
09.01.2015, 15:45 [ТС] | 23 | |||||
Кликните здесь для просмотра всего текста
Начнем:
1) В переменных средах пользователя для smoke, в переменной Path, у меня добавлены: Код
C:\Users\smoke\AppData\Roaming\cabal\bin;C:\emacs\bin Код
C:\Program Files (x86)\GnuWin32\bin;C:\Program Files\Haskell\bin;C:\Program Files\Haskell Platform\2014.2.0.0\lib\extralibs\bin;C:\Program Files\Haskell Platform\2014.2.0.0\bin;C:\Program Files (x86)\Git\cmd;C:\Program Files\Haskell Platform\2014.2.0.0\mingw\bin 2) ghc-mod через cabal установили. 3) Пока что, здесь: Код
C:\Users\smoke\AppData\Roaming 4) Запускаем git bash и вводим: Код
curl -L http://git.io/epre | sh 5) Копируем эту папку сюда: Код
C:\Users\smoke\AppData\Roaming\ P.S. prelude-haskell мы не трогаем, это будет понятно далее. 7) Далее в папке personal создаем файл custom.el и в него копируем, то, что под спойлером. скрин3 Кликните здесь для просмотра всего текста
8)теперь открываем cmd.exe и вводим по-очереди: Код
git clone https://github.com/chrisdone/structured-haskell-mode.git cd structured-haskell-mode cabal install cd elisp/ make Код
C:\Users\smoke\ Код
M:\Users\smoke\Downloads\Torrents\IDE's\Emacs\Prelude\.emacs.d\ 9) Только теперь запускаем emacs, он установит все пакеты, нужно немного подождать. Скрин5 Закрываем его и снова открываем, теперь жмем C-x C-f и открываем файл Main.hs, затем жмем C-c C-z, он спросит пару вещей: Please answer yes or no, жмем y, далее Enter 3 раза. Скрин6 Все можно пользоваться После этих манипуляций в пути: Код
C:\Users\smoke\AppData\Roaming\cabal\bin Так же у меня были установлены программы: unzip, wget, make Они устанавливаются сюда: Код
C:\Program Files (x86)\GnuWin32\bin\ Вроде все, надеюсь я ничего не забыл, как видно все легко и просто
2
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
|
09.01.2015, 15:54 [ТС] | 24 |
в 4 скрине ошибочка, не ту папку заскринил, вообщем structured-haskell-mode копируется сюда:
Код
C:\Users\smoke\AppData\Roaming\.emacs.d\ Код
M:\Users\smoke\Downloads\Torrents\IDE's\Emacs\Prelude\.emacs.d\
2
|
Curry
|
09.01.2015, 15:59
#25
|
Не по теме: Такой фанатизм как не плюсовать!
0
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
|
09.01.2015, 16:20 [ТС] | 26 |
Не по теме: да какой там фанатизм :) Я еще новичок в emacs'e, иначе не пользовался бы всякими Prelude, а свой собственный конфиг бы запилил :) Добавлено через 13 минут И в 3-м скрине имеется ввиду папка: Код
C:\Users\smoke\AppData\Roaming\.emacs.d\personal\
1
|
Модератор
|
|
09.01.2015, 17:13 | 27 |
О! Теперь чёто заработало! Наверно, молитва БГ помогла.
Пока не понял как компилировать и можно ли запускать в качестве консоли используя фрейм emacs (надо make к каждому файлу писать? и вызывать меню\tools\compile ?). Всё равно, огромное спасибо.
0
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
|
09.01.2015, 17:36 [ТС] | 28 |
Чтобы скомпилировать жмем C-c C-c либо C-c c и выбираем из списка, что хотим сделать, ну там update, configure и т.д.
После компиляции, .exe можно запустить как обычно через cmd.exe, либо в emacs'e нажать C-x m, это запустит eshell и в нем запустить .exe. Есть и простой shell, эмуляция cmd.exe: C-x M-m, но нужно настраивать emacs под cp1251 кодировку. В eshell'e есть один минус, или я не разобрался, вообщем если используем print или putStrLn с кирилицей будут цифры вместо букв. В линуксе кстати все норм, а вот в винде я полагаю из-за кодировки опять таки. Так же можно не компилировать а просто загружать в ghci, с помощью C-c C-l, это комбинация по сути делает и load, а потом reload, ну можно и руками ввести :r. Ну и после того как нажали C-c C-l, можно ввести :main, чтобы вывести результат main'a. Чтобы проверить обновления пакетов в emacs, жмем M-x и вводим list-packages, жмем Enter, появляется список, жмем shift+u, далее x, потом y и т.д. ну там подсказки будут, на вопрос хотите ли удалить старые пакеты нажимаем y.
1
|
Модератор
|
|
09.01.2015, 17:47 | 29 |
Так же и в любой консоли под виндой будет. Текст для Haskell-а должен быть в utf-8, а винде, в консоль, надо в 866-ой кодировке выводить. Кусок текста что я привёл в окне emacs - это как раз пока сборная солянка. Собираюсь написать функцию перекодировки. Есть неколько пакетов по перекодировки. Преобразование в тип Text сразу кодирует utf-8 -> 1251 (или что стоит по умолчанию в системе). Можно чисто функции WinAPI вызывать по перекодировке : WideCharToMultiByte, AnsiToOemBuff и подобные. Сейчас, как раз решаю что лучше.
Но, это, по любому не emacs. Под виндой надо на две стороны кодировать: что в консоль -866, что в окна - 1251.
0
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
|
09.01.2015, 18:06 [ТС] | 30 |
Кстати в линуксе файл как раз в UTF-8, а винде судя по всему кодировка не определена.
Вот 2 скрина. P.S. все равно редко пользуюсь кириллицей Хотя нет, в винде тоже файл в UTF-8
0
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
|
09.01.2015, 18:42 [ТС] | 31 |
Не понял, что запускать в качестве консоли, если имелось ввиду ghci, то C-c C-z.
По поводу make, не знаю никогда не пользовался. structured-haskell-mode исключение, его можно было поставить прописав shm в prelude-require-packages в custom.el и emacs бы его поставил сам, но я так делал и у меня не заработало. Поэтому ставил вручную как и показано на офф страничке. По поводу Tools -> Compile, тоже никогда не пользовался не знаю даже для чего это нужно Может это вообще нужно, чтобы компилировать какие то emacs'овские штуки Вообщем в emacs'e столько всего, все и не запомнить. Также, я вам рекомендую посмотреть исходники на офф страничках prelude, haskell-mode, shm. Посмотреть какие-там хоткеи используются , посмотреть, что я изменил в конфиге. И уже потом под себя настраивать и расширять конфиг.
1
|
Curry
|
10.01.2015, 15:35
#32
|
Не по теме: Возюсь с emacs. Вы правы. Заставить его отображать в консоли *haskell* текст в кодировке 866 (кодировка в которой отображается текст в консольных окнах (по линуксоидному в терминалах)) не удаётся. В нижней строке окна консоли, левее красного крестика, можно нажимать правую кнопку мыши и пытаться вводить всякие cp866 - но толку от этого никакого. А попытки что ни будь вставить в его конфиги по советам из интернета, обычно приводит к пропаданию всех настроек или какой ни будь двойной перекодировки исходного файла без спроса.
0
|
smoke853
|
10.01.2015, 16:04
[ТС]
#33
|
Не по теме: Ну да, я когда первый раз открыл emacs вообще все было непривычно. А теперь мне не привычно пользоваться стрелочками :) Другое дело C-f - вперед, C-b - назад, C-p - вверх, C-n - вниз и их комбинации да еще и плюс smartparens для lisp'ов.
0
|
Curry
|
21.01.2015, 08:24
Haskell и -fno-warn-type-defaults
#35
|
0
|
21.01.2015, 08:24 | |
радио пульт лебёдки Warn - ищу протокол обмена UEFI defaults have been loaded Что значит эта строчка "rno,bno,fno=integer" IntelliJ IDEA, выдает ошибку: [main] WARN io.netty.util.internal.ThreadLocalRandom, как починить? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |