Haskell/moduły
Definicje
[edytuj]- moduł jest to plik zawierający kilka funkcji. Nazwa modułu odpowiada nazwie pliku, z wyjątkiem modułu głównego
- biblioteka ( ang. library ) jest to zestaw kilku modułów[1]
- biblioteka jest dostarczana w postaci pakietu ( ang. package) . Pakietów szukamy na Hackage
- program
moduł
[edytuj]"A module defines a collection of values, datatypes, type synonyms, classes, etc., in an environment created by a set of imports (resources brought into scope from other modules). It exports some of these resources, making them available to other modules. We use the term entity to refer to a value, type, or class defined in, imported into, or perhaps exported from a module." haskell 2010 online report
program
[edytuj]"A Haskell program is a collection of modules, one of which, by convention, must be called Main and must export the value main. The value of the program is the value of the identifier main in module Main, which must be a computation of type IO τ for some type τ. When the program is executed, the computation main is performed, and its result (of type τ) is discarded."
Podział
[edytuj]Moduły:
- standardowe ( są dostarczane z kompilatorem)
- niestandardowe
Co trzeba zrobić aby użyć niestandardowego modułu?
- pobrać
- zainstalować
- zaimportować
Instalowanie
[edytuj]cabal update cabal install <package_name>
Szukamu modułu
[edytuj]Za pomocą
ghc-pkg find-module NazwaModułu
lub :
ghc-pkg list nazwa
Ścieżki
[edytuj]Dla ghci użyj
:show paths
ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
Prelude> :show path
syntax: :show [ args | prog | prompt | prompt2 | editor | stop | modules
| bindings | breaks | context | packages | language ]
Prelude> :show paths
current working directory:
/home/a/haskell/romera03
module import search paths:
.
Dla ghc
ghc --print-libdir
Zawartość modułu
[edytuj]Sprawdzmy listę funkcji w module :
:browse nazwa_modułu
Lista
[edytuj]zaimportowane
[edytuj]:show imports
przykładowy wynik:
import Prelude -- implicit
:show modules
zainstalowane
[edytuj]Lista zainstalowanych modułów:[2]
ghc-pkg list
Przykładowy wynik: lista z podziałem na lokalizacje:
/usr/lib/ghc/package.conf.d Cabal-1.22.5.0 array-0.5.1.0 base-4.8.2.0 bin-package-db-0.0.0.0 binary-0.7.5.0 bytestring-0.10.6.0 containers-0.5.6.2 deepseq-1.4.1.1 directory-1.2.2.0 filepath-1.4.0.0 ghc-7.10.3 ghc-prim-0.4.0.0 haskeline-0.7.2.1 hoopl-3.10.0.2 hpc-0.6.0.2 integer-gmp-1.0.0.0 pretty-1.1.2.0 process-1.2.3.0 rts-1.0 template-haskell-2.10.0.0 terminfo-0.4.0.1 time-1.5.0.1 transformers-0.4.2.0 unix-2.7.1.0 xhtml-3000.2.1 /home/a/.ghc/x86_64-linux-7.10.3/package.conf.d Cabal-1.24.2.0 FontyFruity-0.5.3.2 JuicyPixels-3.2.8 MonadRandom-0.4.2.3 QuickCheck-2.10.0.1 StateVar-1.1.0.4 active-0.2.0.12 adjunctions-4.3 ansi-terminal-0.6.2.3 ansi-wl-pprint-0.6.7.3 async-2.1.1 base-orphans-0.5.4 base64-bytestring-1.0.0.1 bifunctors-5.4.1 blaze-builder-0.4.0.2 bytes-0.15.2 cairo-0.13.3.1 cereal-0.5.4.0 circle-packing-0.1.0.5 colour-2.3.3 comonad-5 contravariant-1.4 cubicbezier-0.5.0.0 data-default-0.7.1.1 data-default-class-0.1.2.0 data-default-instances-containers-0.0.1 data-default-instances-dlist-0.0.1 data-default-instances-old-locale-0.0.1 diagrams-1.4 diagrams-cairo-1.4 diagrams-contrib-1.4.0.1 diagrams-core-1.4 diagrams-lib-1.4.0.1 diagrams-solve-0.1.0.1 diagrams-svg-1.4.1 distributive-0.5.0.2 dlist-0.8.0.2 dual-tree-0.2.0.9 exceptions-0.8.3 fail-4.9.0.0 file-embed-0.0.10 fingertree-0.1.1.0 force-layout-0.4.0.6 free-4.12.4 fsnotify-0.2.1 generic-deriving-1.11.1 glib-0.13.4.1 groups-0.4.0.0 gtk2hs-buildtools-0.13.2.2 hashable-1.2.4.0 hashtables-1.2.1.1 hinotify-0.3.9 integration-0.2.1 intervals-0.7.2 kan-extensions-5.0.1 lens-4.15.1 linear-1.20.5 matrices-0.4.4 mfsolve-0.3.2.0 microlens-0.4.7.0 microlens-mtl-0.1.10.0 microlens-th-0.4.1.0 monoid-extras-0.4.2 mtl-2.2.1 mtl-compat-0.2.1.3 mwc-random-0.13.5.0 newtype-0.2 old-locale-1.0.0.7 optparse-applicative-0.13.0.0 pango-0.13.3.1 parallel-3.2.1.0 parsec-3.1.11 prelude-extras-0.4.0.3 primitive-0.6.1.0 profunctors-5.2 random-1.1 reflection-2.1.2 scientific-0.3.4.9 semigroupoids-5.1 semigroups-0.18.2 split-0.2.3.1 statestack-0.2.0.5 stm-2.4.4.1 svg-builder-0.1.0.2 tagged-0.8.5 text-1.2.2.1 tf-random-0.5 transformers-compat-0.5.1.4 unix-compat-0.4.3.1 unordered-containers-0.2.7.2 utf8-string-1.0.1.1 vector-0.11.0.0 vector-algorithms-0.7.0.1 void-0.7.1 xml-1.3.14 zlib-0.6.1.2
lub diagram:
ghc-pkg dot | tred | dot -Tsvg >pkgs.svg
Importowanie
[edytuj]Przykłady. W Kolumnie :[3]
- pierwszej jest deklaracja importu
- drugiej dostępne nazwy
import A x, y, A.x, A.y import A() (nothing) import A(x) x, A.x import qualified A A.x, A.y import qualified A() (nothing) import qualified A(x) A.x import A hiding () x, y, A.x, A.y import A hiding (x) y, A.y import qualified A hiding () A.x, A.y import qualified A hiding (x) A.y import A as B x, y, B.x, B.y import A as B(x) x, B.x import qualified A as B B.x, B.y
Ścieżka / hierarchia
[edytuj]import D.E.M
oznacza że w ścieżce wyszukiwania jest :[4]
- katalog D, w nim podkatalog E
- w katalogu E jest plik M.hs
Inna nazwa to hierarchia modułów
import Cards.Cards as Cards
Oznacza że w katalogu Cards jest plik Cards.hs który immportujemy jako moduł Cards[5]
Moduły standardowe
[edytuj]- Prelude[6]
Źródła
[edytuj]- ↑ stackoverflow question: whats-the-difference-between-module-package-and-library-in-haskell
- ↑ stackoverflow question: haskell-cabal-i-just-installed-packages-but-now-the-packages-are-not-found?rq=1
- ↑ haskell online report: modules
- ↑ ghc 6.2 docs : separate-compilation
- ↑ Hierarchical_Imports w ang wikibooks
- ↑ Moduł Prelude