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ł
edytujModuły:
- standardowe ( są dostarczane z kompilatorem)
- niestandardowe
Co trzeba zrobić aby użyć niestandardowego modułu?
- pobrać
- zainstalować
- zaimportować
Instalowanie
edytujcabal update cabal install <package_name>
Szukamu modułu
edytujZa pomocą
ghc-pkg find-module NazwaModułu
lub :
ghc-pkg list nazwa
Ścieżki
edytujDla 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
edytujSprawdzmy listę funkcji w module :
:browse nazwa_modułu
Lista
edytujzaimportowane
edytuj:show imports
przykładowy wynik:
import Prelude -- implicit
:show modules
zainstalowane
edytujLista 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
edytujPrzykł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
edytujimport 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