LINUX.ORG.RU

Где документация на Haskell ?

 


0

2

https://www.haskell.org/documentation/

module Test1 (main) where
import Prelude (putStrLn)

data Bool = T  |  F

( ∧ ) T T = T
( ∧ ) T F = F
( ∧ ) F T = F
( ∧ ) F F = F

( | ) T T = T
( | ) T F = T
( | ) F T = T
( | ) F F = F

( ¬ ) T  = F
( ¬ ) F = T

( ⊕ ) T T = T
( ⊕ ) T F = F
( ⊕ ) F T = F
( ⊕ ) F F = T

main = putStrLn ("Hello, world")

Выдаёт ошибку:

test1.hs:11:5: error: parse error on input ‘)’
   |
11 | ( | ) T T = T
   |     ^
Failed, no modules loaded.

Вопрос, что не так с символом «|» и где про это читать?

Поиск по словам «haskell vertical bar» не помог.

★★★

Последнее исправление: Shushundr (всего исправлений: 2)

Ну начни хотя бы здесь:

https://wiki.haskell.org/Introduction

А ещё лучше книжку какую возьми. Learn You A Haskell (http://learnyouahaskell.com/) или Брагилевского, например, хоть он и ненавидит ЛОР за что-то.

А вообще, основная документация называется Haskell Report и лежит тут: https://www.haskell.org/onlinereport/haskell2010/

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 5)
Ответ на: комментарий от hateyoufeel

Переписал твой код в приличный вид:

import Prelude (putStrLn, Show, IO)

data Bool = F | T
  deriving Show
  
(&&) :: Bool -> Bool -> Bool
T && T = T
_ && _ = F

(^) :: Bool -> Bool -> Bool
T ^ T = T
F ^ F = T
_ ^ _ = F

not :: Bool -> Bool
not T = F
not F = T

( || ) :: Bool -> Bool -> Bool
T || _ = T
_ || T = T
_ || _ = F

main :: IO ()
main = putStrLn "Hello, world!"

Символ | является частью синтаксиса и ты не можешь его как оператор использовать.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Мой код приличнее, потому что он компактнее и в нём меньше лишнего и вызывающего вопросы.
единственное чего мне не хватало, это «deriving Show».
и теперь у меня всё хорошо:

ghci> T ∨ F
T
ghci> T ∧ F
F
ghci> (¬)T
F
ghci> (¬)F
T
Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

Указывать типы для функцих верхнего уровня – правило хорошего тона, и компилятор тебе выкинет предупреждение при сборке с -Wall если их нет. Это единственная разница между моим кодом и твоим.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Вот на этой странице говорится про .lhs-файлы - https://www.seas.upenn.edu/~cis1940/spring13/lectures/01-intro.html

мол, существует некий «Literate Haskell», надо просто ставить значки «>» перед кодом.

Но мне непонятно, как это должно работать, если «>» это зарезервированный символ в HTML.

Shushundr ★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Брагилевского, например, хоть он и ненавидит ЛОР за что-то.

ну, тут вечно кидаются какахами.. он может непривычный..

«понять и простить» :)

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от AndreyKl

Вот что за мода маскировать в генте пакеты? Могли бы по одной версии сделать стабильной.

63 штуки надо размаскировать, чтобы просто поставить библиотеку для графики!

# emerge -av dev-haskell/gi-gtk

 * IMPORTANT: 1 news items need reading for repository 'gentoo'.
 * Use eselect news read to view new items.


These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ~] dev-haskell/text-1.2.5.0:0/1.2.5.0::gentoo  USE="-doc -hscolour -profile" 153 KiB
[ebuild  N    ~] dev-haskell/mtl-2.2.2:0/2.2.2::gentoo  USE="-doc -hscolour -profile" 17 KiB
[ebuild  N    ~] dev-haskell/fail-4.9.0.0:0/4.9.0.0::gentoo  USE="-profile" 3 KiB
[ebuild  N    ~] dev-haskell/transformers-0.5.6.2:0/0.5.6.2::gentoo  USE="-doc -hscolour -profile" 42 KiB
[ebuild  N    ~] dev-haskell/transformers-compat-0.6.6:0/0.6.6::gentoo  USE="-doc -hscolour -profile" 41 KiB
[ebuild  N    ~] dev-haskell/parsec-3.1.14.0-r1:0/3.1.14.0::gentoo  USE="-doc -hscolour -profile" 35 KiB
[ebuild  N    ~] dev-haskell/cabal-3.4.1.0:0/3.4.1.0::gentoo  USE="-doc -hscolour -profile" 818 KiB
[ebuild  N    ~] dev-haskell/tagged-0.8.6.1:0/0.8.6.1::gentoo  USE="-doc -hscolour -profile" 10 KiB
[ebuild  N    ~] dev-haskell/haskell-gi-base-0.26.0:0/0.26.0::haskell  USE="-doc -hoogle -hscolour -profile" 67 KiB
[ebuild  N    ~] dev-haskell/haskell-gi-overloading-1.0:0/1.0::haskell  USE="-profile" 2 KiB
[ebuild  N    ~] dev-haskell/primitive-0.7.3.0:0/0.7.3.0::gentoo  USE="-doc -hscolour -profile" 57 KiB
[ebuild  N    ~] dev-haskell/stm-2.5.0.1:0/2.5.0.1::gentoo  USE="-doc -hscolour -profile" 16 KiB
[ebuild  N    ~] dev-haskell/unliftio-core-0.2.0.1:0/0.2.0.1::haskell  USE="-doc -hoogle -hscolour -profile" 5 KiB
[ebuild  N    ~] dev-haskell/cabal-doctest-1.0.9:0/1.0.9::gentoo  USE="-doc -hscolour -profile" 11 KiB
[ebuild  N    ~] dev-haskell/network-3.1.2.5:0/3.1.2.5::gentoo  USE="-devel -doc -hscolour -profile -test" 137 KiB
[ebuild  N    ~] dev-haskell/blaze-builder-0.4.2.1:0/0.4.2.1::gentoo  USE="-doc -hscolour -profile -test" 60 KiB
[ebuild  N    ~] dev-haskell/safe-0.3.19:0/0.3.19::gentoo  USE="-doc -hscolour -profile -test" 12 KiB
[ebuild  N    ~] dev-haskell/xdg-basedir-0.2.2-r1:0/0.2.2::haskell  USE="-doc -hoogle -hscolour -profile" 3 KiB
[ebuild  N    ~] dev-haskell/data-default-class-0.1.2.0:0/0.1.2.0::gentoo  USE="-doc -hscolour -profile" 3 KiB
[ebuild  N    ~] dev-haskell/xml-types-0.3.8:0/0.3.8::gentoo  USE="-doc -hscolour -profile" 4 KiB
[ebuild  N    ~] dev-haskell/zlib-0.6.2.3:0/0.6.2.3::gentoo  USE="-bundled-c-zlib -doc -hscolour -non-blocking-ffi -profile -test" 146 KiB
[ebuild  N    ~] dev-haskell/splitmix-0.1.0.3:0/0.1.0.3::gentoo  USE="-doc -hscolour -optimised-mixer -profile" 21 KiB
[ebuild  N    ~] dev-haskell/base-orphans-0.8.6:0/0.8.6::gentoo  USE="-doc -hscolour -profile -test" 24 KiB
[ebuild  N    ~] dev-haskell/split-0.2.3.4:0/0.2.3.4::gentoo  USE="-doc -hscolour -profile -test" 16 KiB
[ebuild  N    ~] dev-haskell/regex-base-0.94.0.1:0/0.94.0.1::gentoo  USE="-doc -hscolour -profile" 10 KiB
[ebuild  N    ~] dev-haskell/haskell-lexer-1.1:0/1.1::gentoo  USE="-doc -hscolour -profile" 15 KiB
[ebuild  N    ~] dev-haskell/happy-1.20.0::haskell  USE="-doc -test" 181 KiB
[ebuild  N    ~] dev-haskell/integer-logarithms-1.0.3.1-r1:0/1.0.3.1::gentoo  USE="-doc -hscolour -profile" 9 KiB
[ebuild  N    ~] dev-haskell/colour-2.3.6:0/2.3.6::haskell  USE="-doc -hoogle -hscolour -profile" 21 KiB
[ebuild  N    ~] dev-haskell/hashable-1.4.0.2:0/1.4.0.2::gentoo  USE="-doc -hscolour -profile" 25 KiB
[ebuild  N    ~] dev-haskell/resourcet-1.2.6:0/1.2.6::haskell  USE="-doc -hoogle -hscolour -profile -test" 17 KiB
[ebuild  N    ~] dev-haskell/vector-0.12.3.1-r1:0/0.12.3.1::haskell  USE="boundschecks -doc -hoogle -hscolour -internalchecks -profile -test -unsafechecks" 156 KiB
[ebuild  N    ~] dev-haskell/blaze-markup-0.8.2.8:0/0.8.2.8::gentoo  USE="-doc -hscolour -profile -test" 15 KiB
[ebuild  N    ~] dev-haskell/ansi-terminal-0.11.3:0/0.11.3::haskell  USE="-doc -example -hoogle -hscolour -profile" 37 KiB
[ebuild  N    ~] dev-haskell/pretty-show-1.10:0/1.10::gentoo  USE="-doc -hscolour -profile" 42 KiB
[ebuild  N    ~] dev-haskell/regex-tdfa-1.3.2:0/1.3.2::gentoo  USE="-doc -hscolour -profile -test" 81 KiB
[ebuild  N    ~] dev-haskell/random-1.2.1.1:0/1.2.1.1::haskell  USE="-doc -hoogle -hscolour -profile" 47 KiB
[ebuild  N    ~] dev-haskell/exceptions-0.10.4-r1:0/0.10.4::gentoo  USE="-doc -hscolour -profile -test" 21 KiB
[ebuild  N    ~] dev-haskell/async-2.2.4-r1:0/2.2.4::haskell  USE="-doc -hoogle -hscolour -profile -test" 17 KiB
[ebuild  N    ~] dev-haskell/blaze-html-0.9.1.2-r1:0/0.9.1.2::gentoo  USE="-doc -hscolour -profile -test" 80 KiB
[ebuild  N    ~] dev-haskell/unordered-containers-0.2.17.0:0/0.2.17.0::gentoo  USE="-doc -hscolour -profile" 53 KiB
[ebuild  N    ~] dev-haskell/vector-algorithms-0.8.0.4:0/0.8.0.4::gentoo  USE="bench boundschecks properties -doc -hscolour -internalchecks -profile -test -unsafechecks" 27 KiB
[ebuild  N    ~] dev-haskell/scientific-0.3.7.0-r1:0/0.3.7.0::gentoo  USE="-doc -hscolour -profile" 29 KiB
[ebuild  N    ~] dev-haskell/attoparsec-0.14.4:0/0.14.4::gentoo  USE="-doc -hscolour -profile" 157 KiB
[ebuild  N    ~] dev-haskell/streaming-commons-0.2.2.4:0/0.2.2.4::gentoo  USE="-doc -hscolour -profile -test" 83 KiB
[ebuild  N    ~] dev-haskell/typed-process-0.2.9.0:0/0.2.9.0::haskell  USE="-doc -hoogle -hscolour -profile -test" 18 KiB
[ebuild  N    ~] dev-haskell/mono-traversable-1.0.15.3:0/1.0.15.3::haskell  USE="-doc -hoogle -hscolour -profile -test" 40 KiB
[ebuild  N    ~] dev-haskell/conduit-1.3.4.2:0/1.3.4.2::gentoo  USE="-doc -hscolour -profile -test" 87 KiB
[ebuild  N    ~] dev-haskell/conduit-extra-1.3.6:0/1.3.6::haskell  USE="-doc -hoogle -hscolour -profile -test" 33 KiB
[ebuild  N    ~] dev-haskell/xml-conduit-1.9.1.1:0/1.9.1.1::gentoo  USE="-doc -hscolour -profile -test" 42 KiB
[ebuild  N    ~] dev-haskell/haskell-gi-0.26.0:0/0.26.0::haskell  USE="-doc -hoogle -hscolour -profile -test" 135 KiB
[ebuild  N    ~] dev-haskell/gi-glib-2.0.26:0/2.0.26::haskell  USE="-doc -hoogle -hscolour -profile" 16 KiB
[ebuild  N    ~] dev-haskell/gi-cairo-1.0.26:0/1.0.26::haskell  USE="-doc -hoogle -hscolour -profile" 11 KiB
[ebuild  N    ~] dev-haskell/gi-freetype2-2.0.1:0/2.0.1::haskell  USE="-doc -hoogle -hscolour -profile" 11 KiB
[ebuild  N    ~] dev-haskell/gi-gobject-2.0.27:0/2.0.27::haskell  USE="-doc -hoogle -hscolour -profile" 14 KiB
[ebuild  N    ~] dev-haskell/gi-gmodule-2.0.2:0/2.0.2::haskell  USE="-doc -hoogle -hscolour -profile" 11 KiB
[ebuild  N    ~] dev-haskell/gi-gio-2.0.29:0/2.0.29::haskell  USE="-doc -hoogle -hscolour -profile" 23 KiB
[ebuild  N    ~] dev-haskell/gi-atk-2.0.24:0/2.0.24::haskell  USE="-doc -hoogle -hscolour -profile" 12 KiB
[ebuild  N    ~] dev-haskell/gi-harfbuzz-0.0.6:0/0.0.6::haskell  USE="-doc -hoogle -hscolour -profile" 11 KiB
[ebuild  N    ~] dev-haskell/gi-gdkpixbuf-2.0.28:0/2.0.28::haskell  USE="-doc -hoogle -hscolour -profile" 12 KiB
[ebuild  N    ~] dev-haskell/gi-pango-1.0.26:0/1.0.26::haskell  USE="-doc -hoogle -hscolour -profile" 13 KiB
[ebuild  N    ~] dev-haskell/gi-gdk-3.0.25:0/3.0.25::haskell  USE="-doc -hoogle -hscolour -profile" 13 KiB
[ebuild  N    ~] dev-haskell/gi-gtk-3.0.38:0/3.0.38::haskell  USE="-doc -hoogle -hscolour -profile" 24 KiB

Total: 63 packages (63 new), Size of downloads: 3321 KiB

Would you like to merge these packages? [Yes/No] yes

Размаскировывать все версии в оверлее я не хочу, потому что мне надо, чтобы система продолжала собираться, а не опасаться того, что они что-то там изменят/обновят и всё навернётся.

Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

Если ты всё ещё хочешь Leksah поставить, то забей болт. Это бесполезное занятие. Тем более, через Gentoo. Leksah сейчас только сборку в Nix поддерживает.

Алсо, гентовые хаскелломейнтейнеры свалили на NixOS по большей части.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

гентовые хаскелломейнтейнеры свалили на NixOS

А могли бы portage переписать на haskell, как это сделали в exherbo с пакетным менеджером на C++ (то ли paludis, то ли cave)

Shushundr ★★★
() автор топика

Мне непонятно, как ищет модули ghci

$ ghci Graphics.UI.Gtk -v
GHCi, version 9.0.2: https://www.haskell.org/ghc/  :? for help
Glasgow Haskell Compiler, Version 9.0.2, stage 2 booted by GHC version 9.0.2
*** initializing unit database:
Using binary package database: /usr/lib64/ghc-9.0.2/package.conf.d/package.cache
package flags []
loading package database /usr/lib64/ghc-9.0.2/package.conf.d
wired-in package ghc-prim mapped to ghc-prim-0.7.0
wired-in package ghc-bignum mapped to ghc-bignum-1.1
wired-in package base mapped to base-4.15.1.0
wired-in package rts mapped to rts
wired-in package template-haskell mapped to template-haskell-2.17.0.0
wired-in package ghc mapped to ghc-9.0.2
!!! initializing unit database: finished in 92.23 milliseconds, allocated 42.089 megabytes
*** initializing unit database:
package flags []
loading package database /usr/lib64/ghc-9.0.2/package.conf.d
wired-in package ghc-prim mapped to ghc-prim-0.7.0
wired-in package ghc-bignum mapped to ghc-bignum-1.1
wired-in package base mapped to base-4.15.1.0
wired-in package rts mapped to rts-1.0.2
wired-in package template-haskell mapped to template-haskell-2.17.0.0
wired-in package ghc mapped to ghc-9.0.2
!!! initializing unit database: finished in 17.80 milliseconds, allocated 14.542 megabytes
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.31 milliseconds, allocated 0.118 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 0.68 milliseconds, allocated 0.805 megabytes
*** GHC.CoreToByteCode [Ghci1]:
!!! GHC.CoreToByteCode [Ghci1]: finished in 0.07 milliseconds, allocated 0.038 megabytes
*** systool:linker:
*** gcc:
x86_64-pc-linux-gnu-gcc -B/usr/lib64/ghc-9.0.2/ghc-prim-0.7.0 --print-file-name libc.so
!!! systool:linker: finished in 0.40 milliseconds, allocated 0.064 megabytes
*** systool:linker:
*** gcc:
x86_64-pc-linux-gnu-gcc -B/usr/lib64/ghc-9.0.2/ghc-prim-0.7.0 --print-file-name libm.so
!!! systool:linker: finished in 0.28 milliseconds, allocated 0.060 megabytes
Loading package ghc-prim-0.7.0 ... linking ... done.
*** systool:linker:
*** gcc:
x86_64-pc-linux-gnu-gcc -B/usr/lib64/ghc-9.0.2/ghc-bignum-1.1 --print-file-name libgmp.so
!!! systool:linker: finished in 0.34 milliseconds, allocated 0.060 megabytes
Loading package ghc-bignum-1.1 ... linking ... done.
Loading package base-4.15.1.0 ... linking ... done.
Search directories (user):
Search directories (gcc):
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.18 milliseconds, allocated 0.075 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 0.04 milliseconds, allocated 0.021 megabytes
*** GHC.CoreToByteCode [Ghci1]:
!!! GHC.CoreToByteCode [Ghci1]: finished in 0.06 milliseconds, allocated 0.037 megabytes
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.15 milliseconds, allocated 0.091 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 0.05 milliseconds, allocated 0.029 megabytes
*** GHC.CoreToByteCode [Ghci1]:
!!! GHC.CoreToByteCode [Ghci1]: finished in 0.10 milliseconds, allocated 0.075 megabytes
*** Chasing dependencies:
Chasing modules from: 
!!! Chasing dependencies: finished in 0.05 milliseconds, allocated 0.027 megabytes
Stable obj: {}
Stable BCO: {}
unload: retaining objs []
unload: retaining bcos []
Ready for upsweep []
Upsweep completely successful.
*** Deleting temp files:
Deleting: 
*** Chasing dependencies:
Chasing modules from: *Graphics.UI.Gtk
!!! Chasing dependencies: finished in 0.09 milliseconds, allocated 0.050 megabytes
Stable obj: {}
Stable BCO: {}
unload: retaining objs []
unload: retaining bcos []
Ready for upsweep []
Upsweep completely successful.
*** Deleting temp files:
Deleting: 

<no location info>: error:
    module ‘Graphics.UI.Gtk’ cannot be found locally
Failed, no modules loaded.
Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

По неизвестной причине ошибка пропала, и мне удалось запустить графический hello world:

{-# LANGUAGE OverloadedStrings #-}
module Main (Main.main) where

import qualified GI.Gtk as Gtk (main, init)
import GI.Gtk
       (widgetShowAll, setContainerChild, widgetDestroy, onButtonClicked,
        setButtonLabel, buttonNew, setWindowTitle, setContainerBorderWidth,
        mainQuit, onWidgetDestroy, windowNew)
import GI.Gtk.Enums (WindowType(..))

main :: IO ()
main = do
  Gtk.init Nothing
  window <- windowNew WindowTypeToplevel
  onWidgetDestroy window mainQuit
  setContainerBorderWidth window 10
  setWindowTitle window "Hello World"
  button <- buttonNew
  setButtonLabel button "Hello World"
  onButtonClicked button (putStrLn "Hello World")
  onButtonClicked button $ do
    putStrLn "A \"clicked\"-handler to say \"destroy\""
    widgetDestroy window
  setContainerChild window button
  widgetShowAll window
  Gtk.main

Осталось понять, как нарисовать круг.

Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

Мой код приличнее, потому что в нём меньше вызывающего вопросы

Твой код весь вызывает вопросы. Зачем переизобретать Bool? Зачем делать все через спецсимволы, которых нет на стандартной клавиатуре? Почему нет очевидных оптимизаций типа такого?

( ∧ ) T T = T
( ∧ ) _ _ = F

меньше лишнего

Напомню, что ты только что переизобрел Bool, который уже есть в хаскеле

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Почему нет очевидных оптимизаций типа такого?

Потому что введение нового символа _ добавляет ещё одно понятие/концепцию, которую надо знать, для того, чтобы понимать что именно написано. А ведь можно было обойтись без этого. Я обошёлся и таким образом сократил сложность понимания.

ты только что переизобрел Bool

Я для этого даже специально дописал запрет на импорт этого из Prelude. Я специально, для наглядности.

Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

Я всё чаще замечаю, что люди пытаются освоить сложные технологии без предварительного изучения теории. В моё время (мне 54 года) для изучения чего-то сравнимого по сложности с Хаскелем (скажем, курс ТФКП - теория функций комплексной переменной) сначала как минимум читали толстый учебник. Почему бы при изучении нового языка не поступить так же?

hbee ★★★★
()
Ответ на: комментарий от hbee

читали толстый учебник. Почему бы при изучении нового языка не поступить так же?

Потому что изготовление толстых учебников крайне дорого. И вместо этого изготавливают тонкие учебники, по которым неясно как решать задачи. Кроме того, эти учебники не снабжают навигацией, и свою задачу с примерами решений найти невозможно, приходится читать много-много лишнего.

Уверен, что лет через 20 хорошие учебники по Haskell появятся.

Shushundr ★★★
() автор топика
Ответ на: комментарий от Shushundr

Потому что введение нового символа _ добавляет ещё одно понятие/концепцию

Ты верхом на сферическом коне в вакууме что-ли программируешь?

Если ты тут занимешься изучением хаскеля, то советую поскорее ознакомиться с символом _. Если же ты занимаешься «философскими упражнениями», то не надо говорить про «приличность» твоего кода, потому что это совсем не так

Aswed ★★★★★
()