Representableのinstance例: (->) r
関数型 (->) r
のinstanceはかなり単純なものになる
つまり (->) Integer
に対してinstanceを定義し、 (->) Integer Int
を見てみる
hsindex :: (Integer -> Int) -> Integer -> Int
tabulate :: (Integer -> Int) -> (Integer -> Int)
positions :: Integer -> Integer
型から見てもわかるように、それぞれ以下の関数に対応する
hsindex = ($)
tabulate = id
positions = id
intex
は、
与えられた関数 (Integer -> Int)
に対して、
Integer
を与えたもの
つまり、関数適用
tabulate
は、
与えられた関数をそのまま返す
つまり、恒等関数
positions
は、
与えられた値をそのまま返す
つまり、恒等関数
hsinstance Representable ((->) r) where
type Rep ((->) r) = r
index = ($)
positions = id
tabulate = id
index
を
id
で定義する例も
見かけたが、同じ意味である
id :: a -> a
($) :: (a -> b) -> a -> b
ghci> index (*10) 2
20
> tabulate (*10) 2
20
> positions (*10) 2
20