advanced topics in haskell
DESCRIPTION
A supplement to the talk for introduction to Haskell at Open Source Conference 2007TRANSCRIPT
Advanced Topics in Haskell
オープンソースカンファレンス2007 Hokkaido北海道大学学術交流会館
2006-06-30 14:30-15:15 第5会議室
池上 大介[email protected]
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