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

 
A graph containing all installed Haskell packages

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


Źródła edytuj

  1. stackoverflow question: whats-the-difference-between-module-package-and-library-in-haskell
  2. stackoverflow question: haskell-cabal-i-just-installed-packages-but-now-the-packages-are-not-found?rq=1
  3. haskell online report: modules
  4. ghc 6.2 docs : separate-compilation
  5. Hierarchical_Imports w ang wikibooks
  6. Moduł Prelude