Bilgisayar »

AFP Notes

Advanced Functional Programming Notes

Module declaration

 module modid [exports] where body

 module Data.Tree (Tree, mapTree, foldTree) where ...

imports

 import qualified Data.Set as S
 import Data.Set (elems, union, (\\))

 import Data.Set hiding (elems)

Packages

 $ ghc-pkg list

 /usr/lib/ghc-6.8.2/package.conf:
    Cabal-1.2.3.0, GLUT-2.1.1.1, HAppS-Data-0.9.2.1,
    HAppS-IxSet-0.9.2.1, HAppS-Server-0.9.2.1, HAppS-State-0.9.2.1,
    HAppS-Util-0.9.2.1, HDBC-1.1.5, HDBC-odbc-1.1.4.4,
    HDBC-sqlite3-1.1.4.0, HGL-3.2.0.0, HList-0.1, HSH-1.2.6,
    HTTP-3001.0.4, HUnit-1.2.0.0, HaXml-1.13.3, MissingH-1.0.1,
    OpenGL-2.2.1.1, QuickCheck-1.1.0.0, X11-1.4.2, anydbm-1.0.5,
    array-0.1.0.0, base-3.0.1.0, binary-0.4.1, bytestring-0.9.0.1,
    cgi-3001.1.5.1, containers-0.1.0.1, directory-1.0.0.0,
    filepath-1.1.0.0, ftphs-1.0.4, (ghc-6.8.2), haskell98-1.0.1.0,
    haskelldb-0.10, (hat-2.5), haxr-3000.0.1, hpc-0.5.0.0,
    hslogger-1.0.5, hsql-1.7, hsql-mysql-1.7, hsql-odbc-1.7,
    html-1.0.1.1, mtl-1.1.0.0, network-2.1.0.0, old-locale-1.0.0.0,
    old-time-1.0.0.0, packedstring-0.1.0.0, pandoc-0.46,
    parsec-2.1.0.0, pretty-1.0.0.0, process-1.0.0.0, random-1.0.0.0,
    readline-1.0.1.0, regex-base-0.93.1, regex-compat-0.91,
    regex-posix-0.93.1, rts-1.0, stm-2.1.1.0, syb-with-class-0.4,
    template-haskell-2.2.0.0, time-1.1.2.0, unix-2.3.0.0, uulib-0.9.5,
    xhtml-3000.0.2.1, xmonad-0.7, xmonad-contrib-0.7

 $ ghc-pkg describe containers

name: containers version: 0.1.0.1 license: BSD3 copyright: maintainer: libraries@haskell.org stability: homepage: package-url: description: This package contains efficient general-purpose implementations

             of various basic immutable container types.  The declared cost of
             each operation is either worst-case or amortized, but remains
             valid even if structures are shared.

category: author: exposed: True exposed-modules: Data.Graph Data.IntMap Data.IntSet Data.Map

                 Data.Sequence Data.Set Data.Tree

hidden-modules: import-dirs: /usr/lib/ghc-6.8.2/lib/containers-0.1.0.1 library-dirs: /usr/lib/ghc-6.8.2/lib/containers-0.1.0.1 hs-libraries: HScontainers-0.1.0.1 extra-libraries: extra-ghci-libraries: include-dirs: includes: depends: base-3.0.1.0 array-0.1.0.0 hugs-options: cc-options: ld-options: framework-dirs: frameworks: haddock-interfaces: /usr/share/doc/ghc6-doc/libraries/containers/containers.haddock haddock-html: /usr/share/doc/ghc6-doc/libraries/containers

Cabal

A textual Cabal file + a Setup.hs file.

Setup.hs

 import Distribution.Simple
 main = defaultMain
Resolve dependencies
runghc Setup configure
Build packages
ruhghc Setup build
Install
runghc Setup install

Building a Cabal package

  • Create dir
  • Write the program
  • Put into darcs
  • Add a .cabal file
  • Add a Setup.hs file
  • Build using Cabal
  • Generate Haddock documentation using Cabal
  • Add a test suite
  • Use darcs to run test suite on every commit

Haddock

Documentation generator (like Javadoc ...)

 -- |This is the starting of Haddock comment
 -- and a continuation
 -- adding /emphasis/

f :: a -> a f x = x

Referential Transparency

  • Equals can be substituted for equals
  • Haskell is referentially transparent, because there is no side effects in functions.

QuickCheck

 import Test.QuickCheck

Simplest:

 quickCheck :: Testable prop => prop -> IO ()

 class Testable where
       property :: prop -> Property

 instance Testable Bool
 instance (Arbitrary a, Show a, Testable prop) => Testable (a -> prop)

Son Değişiklikler

Yazıları Eposta İle Al

Türkçe

English

Mercektekiler

edit SideBar

Page last modified on November 03, 2008, at 07:00 PM EST - Powered by PmWiki

^