Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
1

Haskell и -fno-warn-type-defaults

29.12.2014, 14:32. Показов 3200. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Недавно начал изучать Haskell, пользуюсь связкой emacs + haskell-mode + company-ghc + shm.

В Dispersion.cabal прописаны флаги: -O2 -Wall

Возникла следующая ситуация, которая не дает мне покоя : допустим, я пишу такой простой код:
Haskell
1
2
3
4
module Main where
 
main :: IO ()
main = print $ map (^2) [1..5]
Flycheck сразу же подсвечивает warnings, ну подсвечивает и подсвечивает, загружаю код (C-c C-l). Далее вижу следующие предупреждения ==> скрин1
Как я понял здесь имеется ввиду, что Haskell будет использовать тип Integer по умолчанию или что-то типа того. Такие предупреждения немного поднадоели, как решить проблему? Нашел 2 способа:
1) Прописать явно типы ==> скрин2
2) Использовать флаг -fno-warn-type-defaults ==> скрин3

2 Вопроса:
Как правильно бороться с такими надоедливыми предупреждениями, 1-м способом или 2-м?
Куда лучше прописывать флаги, в Dispersion.cabal или все-таки в каждый модуль отдельно?
Миниатюры
Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2014, 14:32
Ответы с готовыми решениями:

Работа с type в haskell
Доброе время суток задание такого плана : За время учебы в семестре студенты должны сдать...

Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?)
"У нас" ? А где преподавание этой экзотики на высоте? Добавлено через 2 минуты А где такие...

Warning: return type defaults to ‘int’ Что значит этот варнинг?
Вот программа #include <stdio.h> main() { float fahr, celsius; int lower, upper, step; ...

Log4j:WARN
Здравствуйте! Для логирования использую logback. Но при старте приложения, в консоли постоянно...

34
Модератор
5047 / 3276 / 526
Регистрация: 01.06.2013
Сообщений: 6,806
Записей в блоге: 9
09.01.2015, 14:36 21
Author24 — интернет-сервис помощи студентам
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
Lisp
1
2
3
4
5
6
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.org/packages/") t)
(add-to-list 'package-archives
             '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)
как Nameless One когда то советовал, установил из списка пакетов haskell-mode + company-ghc. Подсветка появилась, но не более.
Копирование через ^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
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
но под вин нет нормального IDE для Haskell.
Как нет, когда есть emacs

Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Дописал в .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
В системных переменных, в переменной Path у меня добавлены:
Код
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
P.S. пути я тут написал не все, а только те, которые нужны по данной теме.

2) ghc-mod через cabal установили.

3) Пока что, здесь:
Код
C:\Users\smoke\AppData\Roaming
папки .emacs.d нету

4) Запускаем git bash и вводим:
Код
curl -L http://git.io/epre | sh
Появиться папка на скрине1 выделена

5) Копируем эту папку сюда:
Код
C:\Users\smoke\AppData\Roaming\
6) Далее открываем файл prelude-modules.el, оставляем расскоменнтированными только эти пункты: скрин2.
P.S. prelude-haskell мы не трогаем, это будет понятно далее.

7) Далее в папке personal создаем файл custom.el и в него копируем, то, что под спойлером. скрин3
Кликните здесь для просмотра всего текста

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
(prelude-require-packages '(company-ghc
                            ghc
                            haskell-mode
                            ido-vertical-mode
                            smart-mode-line))
 
 
;;---------------------------
;; Emacs appearance setup
;;---------------------------
 
;; Set frame size
(add-to-list 'default-frame-alist '(height . 35))
(add-to-list 'default-frame-alist '(width . 100))
 
(menu-bar-mode t)
(scroll-bar-mode -1)
(global-linum-mode)
(set-default-font "Consolas-12")
(setq default-directory "M:/Users/smoke/")
 
(setq prelude-auto-save nil
      prelude-flyspell nil
      prelude-guru nil
      prelude-whitespace nil)
 
(setq auto-save-default nil
      make-backup-files nil) 
 
 
;;---------------------------
;; Functions
;;---------------------------
 
;; haskell
(defun prelude-haskell-mode-defaults ()
 (subword-mode +1)
 (turn-on-haskell-doc)
 (interactive-haskell-mode +1)
 (ghc-init)
 (structured-haskell-mode))
 
 
;;---------------------------
;; Plugins
;;---------------------------
 
;; cider
(setq cider-interactive-eval-result-prefix ";; => "
      cider-prompt-save-file-on-load nil
      cider-repl-result-prefix ";; => "
      cider-repl-use-clojure-font-lock t
      cider-switch-to-repl-command 'cider-switch-to-current-repl-buffer)
 
;; company
(setq company-idle-delay nil)
 
;; flycheck
(setq flycheck-display-errors-function 'flycheck-display-error-messages-unless-error-list)
 
;; haskell
(add-to-list 'company-backends '(company-ghc :with company-dabbrev-code))
(add-to-list 'load-path "C:/Users/smoke/AppData/Roaming/.emacs.d/structured-haskell-mode/elisp")
 
(require 'shm)
 
(set-face-background 'shm-current-face "#4F4F4F")
(set-face-background 'shm-quarantine-face "#8C5353")
 
(setq haskell-process-suggest-remove-import-lines t)
 
(eval-after-load 'haskell-mode
  '(progn
     (setq prelude-haskell-mode-hook 'prelude-haskell-mode-defaults)
     (add-hook 'haskell-mode-hook (lambda () (run-hooks 'prelude-haskell-mode-hook)))))
 
;; ido-vertical-mode
(ido-vertical-mode t)
 
;; smart-mode-line
(setq sml/no-confirm-load-theme t
      sml/theme 'respectful)
(sml/setup)
 
 
;;---------------------------
;; Hotkeys
;;---------------------------
 
(global-set-key (kbd "C-SPC") 'company-complete)
 
(global-set-key (kbd "C-M-j") 'delete-indentation)
(global-set-key (kbd "C-<") 'backward-paragraph)
(global-set-key (kbd "C->") 'forward-paragraph)
 
;; company
(define-key company-active-map [return] 'company-complete-common)
(define-key company-active-map [tab] 'company-complete-selection)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
 
;; haskell-mode
(define-key haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
 
;; shm
(define-key shm-map (kbd "M-^") nil)
(define-key shm-map (kbd "C-c C-^") nil)
(define-key shm-map (kbd "M-DEL") nil)
(define-key shm-map (kbd "C-w") nil)
(define-key shm-map (kbd "M-w") nil)
(define-key shm-map (kbd "C-M-k") nil)
(define-key shm-map (kbd "C-M-SPC") nil)
(define-key shm-map (kbd "M-}") nil)
(define-key shm-map (kbd "M-{") nil)
(define-key shm-map (kbd "M-s") nil)
 
(define-key shm-map (kbd "C-S-j") 'shm/simple-indent-newline-indent)
(define-key shm-map (kbd "C-M-j") 'shm/delete-indentation)
(define-key shm-map (kbd "M-j") 'shm/ret-proxy)
(define-key shm-map (kbd "C-c C-M-j") 'shm/swing-up)
(define-key shm-map (kbd "C-<") 'shm/backward-paragraph)
(define-key shm-map (kbd "C->") 'shm/forward-paragraph)
 
;; smartparens
(define-key sp-keymap (kbd "M-A") 'sp-beginning-of-sexp)
(define-key sp-keymap (kbd "M-E") 'sp-end-of-sexp)
(define-key sp-keymap (kbd "M-J") 'sp-join-sexp)
 
(define-key sp-keymap (kbd "C-M-<backspace>") 'sp-backward-kill-sexp)
(define-key sp-keymap (kbd "C-M-k") 'sp-kill-sexp)
(define-key sp-keymap (kbd "C-M-t") 'sp-transpose-sexp)
 
(sp-pair "[" "]" :wrap "M-[")
(sp-pair "{" "}" :wrap "M-{")


8)теперь открываем cmd.exe и вводим по-очереди:
Код
git clone https://github.com/chrisdone/structured-haskell-mode.git
cd structured-haskell-mode
cabal install
cd elisp/
make
У нас создатся папка structured-haskell-mode в:
Код
C:\Users\smoke\
Копируем ее сюда:
Код
M:\Users\smoke\Downloads\Torrents\IDE's\Emacs\Prelude\.emacs.d\
Скрин4

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
будут .exe: cpphs, ghc-mod, ghc-modi, hlint, structured-haskell-mode
Так же у меня были установлены программы:
unzip, wget, make
Они устанавливаются сюда:
Код
C:\Program Files (x86)\GnuWin32\bin\
В переменную path, они у меня добавлены, выше я писал, возможно нужно будет перезагрузить комп.
Вроде все, надеюсь я ничего не забыл, как видно все легко и просто
Миниатюры
Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults  

Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults  

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
Модератор
5047 / 3276 / 526
Регистрация: 01.06.2013
Сообщений: 6,806
Записей в блоге: 9
09.01.2015, 17:13 27
О! Теперь чёто заработало! Наверно, молитва БГ помогла.
Пока не понял как компилировать и можно ли запускать в качестве консоли используя фрейм emacs (надо make к каждому файлу писать? и вызывать меню\tools\compile ?).
Всё равно, огромное спасибо.
Миниатюры
Haskell и -fno-warn-type-defaults  
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
Модератор
5047 / 3276 / 526
Регистрация: 01.06.2013
Сообщений: 6,806
Записей в блоге: 9
09.01.2015, 17:47 29
Цитата Сообщение от smoke853 Посмотреть сообщение
если используем print или putStrLn с кирилицей будут цифры вместо букв
Так же и в любой консоли под виндой будет. Текст для 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
Миниатюры
Haskell и -fno-warn-type-defaults   Haskell и -fno-warn-type-defaults  
0
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
09.01.2015, 18:42  [ТС] 31
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
можно ли запускать в качестве консоли используя фрейм emacs (надо make к каждому файлу писать? и вызывать меню\tools\compile ?).
Не понял, что запускать в качестве консоли, если имелось ввиду 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 - но толку от этого никакого. А попытки что ни будь вставить в его конфиги по советам из интернета, обычно приводит к пропаданию всех настроек или какой ни будь двойной перекодировки исходного файла без спроса.
Все действия "нечеловеческие", к примеру, откат в меню обозначен как C-_ - ну я и думал что нажав Ctrl+_ , будет откат. Но не такова негуманоидная психология Столлмана! Это действие уменьшает шрифт. А что увеличивает - неизвестно. Чем кроме мыши выделять - неизвестно. Ну, это мелочи. Главное есть обнаружение очепяток "на лету" и даже некоторые автоподстановки.

0
smoke853
10.01.2015, 16:04  [ТС]
  #33

Не по теме:

Ну да, я когда первый раз открыл emacs вообще все было непривычно. А теперь мне не привычно пользоваться стрелочками :) Другое дело C-f - вперед, C-b - назад, C-p - вверх, C-n - вниз и их комбинации да еще и плюс smartparens для lisp'ов.

На самом деле, вроде есть несколько вариантов undo и redo.
Но я запомнил как:
С-_ - undo
M-_ - redo

Я как-то делал список часто используемых хоткеев в emacs'e, но давно уже не подправлял, но по идее ничего не должно было поменяться. Хотя я сейчас пользуюсь emacs'ом 24.4.
https://drive.google.com/open?... authuser=0
Тут нету хоткеев для SHM, кстати я некоторые из них отключил, например: что касается выделения в SHM, мне не очень понравилось. Т.к. в Prelude Божидар Батсов добавил плагин easy-kill и easy-mark, я к ним больше привык. Еще кстати в SHM C-j и M-j работают наоборот в emacs 24.4 и в emacs 24.3 - это нужно иметь ввиду.

Также одни и те же хоткеи для разных режимов могут делать разные вещи.

0
smoke853
21.01.2015, 07:55  [ТС]
  #34

Не по теме:

Цитата Сообщение от smoke853 Посмотреть сообщение
Я как-то делал список часто используемых хоткеев в emacs'e, но давно уже не подправлял
Все-таки решил подправить:
конфиг
хоткеи

P.S. документ на google диске на днях удалю.

0
Curry
21.01.2015, 08:24     Haskell и -fno-warn-type-defaults
  #35

Не по теме:

Цитата Сообщение от smoke853 Посмотреть сообщение
Все-таки решил подправить:
конфиг
хоткеи
P.S. документ на google диске на днях удалю.
Спасибо, утащил. :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2015, 08:24

радио пульт лебёдки Warn - ищу протокол обмена
приветствую всех сломался радио пульт лебёдки Варн. Посмотрел цену - от 50 до 180 баксов (в...

UEFI defaults have been loaded
Всем привет. Началось недавно,когда включаю компьютер утром - он выдает следующее (фото).Потом...

Что значит эта строчка "rno,bno,fno=integer"
Написал программу на примере другой, но преподаватель спросил, что означает вот эта строчка в коде,...

IntelliJ IDEA, выдает ошибку: [main] WARN io.netty.util.internal.ThreadLocalRandom, как починить?
Всем привет! *Если создал тему в неправильном разделе, просьба перенести. Уважаемые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru