Haskell/moduły

Z Wikibooks, biblioteki wolnych podręczników.
Skocz do: nawigacja, szukaj

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 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