Advanced Topics in Haskell

Preview:

DESCRIPTION

A supplement to the talk for introduction to Haskell at Open Source Conference 2007

Citation preview

Advanced Topics in Haskell

オープンソースカンファレンス2007 Hokkaido北海道大学学術交流会館

2006-06-30 14:30-15:15 第5会議室

池上 大介ikegami@madscientist.jp

Haskell同好会

1

関数型言語は

なぜ必要なのか

2

なぜ関数型言語?•“Why Haskell matters”Jens Petersen, RedHatLinux Conf., 2001-09• “Why Functional Programming matters”John Hughes, 2000

3

なぜ関数型言語?•Programming in HaskellGraham Hutton, 2007

4

なぜ関数型言語?

•ソフトウエア危機•工期短縮•正確さ•正確に動くプログラムとは?

•プログラム≠設計仕様

5

関数型言語が

ソフトウエア危機を

解決する

6

関数型言語のアプローチ•プログラムを•見やすく•正確に•High-Level of abstraction•高い再利用性•数理的手法に基づく検証

7

Haskellなら•rapid prototyping•powerful problem solvers•型推論

•最新の型理論に基づく技術

学習は容易ではない「道」

8

Haskell

のレイアウトルール

9

テーブルマナーにうるさい Haskell

a = 10 b = 20 c = 30

OK

a = 10 b = 20 c = 30

NG

a = 10 b = 20 c = 30

NG

10

初心者がはまるのが

レイアウトルール

11

Haskell の「ローカルな関数定義」

implicit grouping

a = b + c where b = 2 c = 3

a = b + c where { b = 2; c = 3; }

explicit grouping

マニアは左側のスタイルが好き→初心者???

12

レイアウトルール•ローカルな関数定義•do notation•初心者は知らない•Arrow notation•マニアでも知名度は低い•Template Haskell•???

13

Haskell

のレイアウトルール

は慣れるしかない

「道」

14

Haskell

の「型」とは何か

15

Graham Hutton の

Chapter 3 を読もう

16

Haskell

ならではの記述法

17

Graham Hutton の

Chapter 4,5 を読もう

18

再帰的関数が

もたらす幸せ

19

Graham Hutton の

Chapter 6 を読もう

20

高階関数が

もたらす幸せ

21

Graham Hutton の

Chapter 7 を読もう

22

Haskell で入出力を

どう書くか

IO モナド

23

Graham Hutton の

Chapter 9 を読もう

24

Haskell で自分が型を

定義するには?

25

Graham Hutton の

Chapter 10 を読もう

26

Haskell の型クラスって

何?

27

Graham Hutton の

Chapter 10 を読もう

28

Haskell FizzBuzz

29

main :: IO () main = mapM_ (putStrLn . fizzBuzz) [1..] fizzBuzz :: Integer -> String fizzBuzz x | x `mod` 15 == 0 = "FizzBuzz" | x `mod` 3 == 0 = "Fizz" | x `mod` 5 == 0 = "Buzz" | otherwise = show x

30

Haskellの黒魔術

31

1. unsafePerformIO

import System.IO.Unsafe unsafePerformIO :: IO a -> a

unsafe一族は存在する

32

2. unsafePerformIO

import Data.Generics cast :: (Typeable a, Typeable b) => a -> Maybe b

実行時型検査!

33

3.Haskell FFI

import Foreign data CChardata CInt

Cで書いてしまう(おお、神よ)

FFI = Foreign Function Interface

34

4.Windows API

import System.Win32 hKEY_CURRENT_USER :: HKEY

やろうと思えば MS-WordもWin32で

35

5.Dons’ evalhttp://www.cse.unsw.edu.au/~dons/hs-plugins/

eval :: Typeable a => String -> [Import] -> IO (Maybe a)

実行時にevalるもはや何でもあり

36