Haskell. Po polsku.

Nowinki o funkcyjnym języku programowania Haskell

Archiwum dla Kwiecień 2010

Instancje klas Show i Read

Skomentuj »

Wartości typu zadeklarowanego jako instancja klasy Show mogą być zamienione na napisy. Wartości typów będące instancjami klasy Read mogą być odczytane z napisu.

Jak zadeklarować instancję klasy Read oraz Show?

  1. Sposób pierwszy. Wykorzystujemy mechanizm deriving, który magicznie zapewni domyślne instancje klas Read oraz Show.

    > newtype UserID = UserID Int 
    >     deriving (Read,Show)
    

    Efekt:

    show (UserID 123) = "UserID 123"
    
  2. Sposób drugi. Wykorzystujemy nowszy mechanizm standalone deriving. Efekt jest taki sam jak w punkcie pierwszym, jednak możemy instancję zadeklarować w innym pliku niż sam typ danych, co jest przydatne jeśli nie możemy zmienić źródeł.

    > newtype UserID = UserID Int 
    > deriving instance Read
    > deriving instance Show
    

    Efekt:

    show (UserID 123) = "UserID 123"
    
  3. Sposób trzeci. Wszystko deklarujemy ręcznie i dzięki temu mamy pełna swobodę w zdefiniowaniu reprezentacji danych. W tym wpisie przykład jak wykorzystać istniejącą już instancję Show oraz Read dla typu Int. UserID będzie po prostu liczbą całkowitą.

    > instance Show UserID where
    >     showsPrec prec (UserID val) = showsPrec prec val
    > 
    > instance Read DocumentID where
    >     readsPrec prec = let makeUserID (i,v) = (UserID i,v) 
    >                      in map makeUserID . readsPrec prec 
    

    Efekt:

    show (UserID 123) = "123"
    

Więcej na temat standardowych klas Show i Read tutaj.

Written by gracjanpolak

Kwiecień 17, 2010 at 18:52

Napisane w Haskell

Darcs Emacs Windows

Skomentuj »

Jako systemu kontroli wersji używam Darcs a jako edytora Emacs. Dziś opiszę, jak ustawić Darcs do używania Emacs jako edytora pod Windows.

  1. Konfiguracja Emacs. Do pliku ~/.emacs dopisujemy na końcu następujący fragment:
    (require 'server)
    ; Suppress error
    ; "directory ~/.emacs.d/server is unsafe"
    ; on windows.
    (when (and (= emacs-major-version 23)
               (= emacs-minor-version 1)
               (equal window-system 'w32))
      (defun server-ensure-safe-dir (dir) "Noop" t))
    (server-start)
    

    Po zapisaniu pliku albo uruchom Emacs od nowa albo (jeśli umiesz) wykonaj tej fragment kodu Lisp.

  2. Ustawienie zmiennej środowiska EDITOR. Pod Windowsami jest to trochę zakręcone, ale ogólnie należy kliknąć prawym przyciskiem myszy na Mój Komputer, wybrać Właściwości, potem znaleźć zakładkę Zaawansowane (która na każdych Windowsach wygląda inaczej), tam kliknąć Zmienne Środowiska, dodaj zmienną. Jesteś w domu, jeśli uda ci się dotrzeć do takiego okienka:

    Uwaga: zmienne środowiskowe będą działały dla nowo otwartych terminali. Więc zamknij wszystkie CMD i otwórz je na nowo już po dodaniu zmiennej EDITOR.

  3. Użycie:
    C:\>darcs record
    
    Shall I record this change? (11/11)  [ynWesfvplxdaqjk], or ? for help: y
    What is the patch name? Initial version of drag and drop
    Do you want to add a long comment? [yn]y
    

    Tutaj możesz odpowiedzieć Y. Na chwilę zostaniesz przełączony do Emacsa z otwartym plikiem tymczasowym. Edytuj, zapisz, zamknij bufor. Dłuższy opis zmiany został zapisany.

    Finished recording patch 'Initial version of drag and drop'
    

Mam nadzieję, że powyższy opis pomoże efektywniej korzystać z Darcs oraz Emacs pod Windows. Powodzenia!

Written by gracjanpolak

Kwiecień 15, 2010 at 10:58

Napisane w Haskell

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.