stack new project_name --resolver=lts-23.25 を実行すればとりあえずHLSのエラーは出ない
stack newコマンドはリゾルバーを明示的に指定してあげないと最新のsnapshotを持ってきちゃうぽい
適当なコードは
runghc file.hsで実行
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f e [] = e
foldr f e (x:xs) = f x (foldr f e xs) -- ①
sum :: Num a => [a] -> [a]
sum [] = 0
sum (x:xs) = x + sum xs -- ②
{-
この時、
(foldr f e) -> sum
f -> (+)
e -> 0
とすると①と②が同じものを表すようになる
filter f (x:xs) = if f x : filter xs
キャンセレーションルール
all :: (a->Bool) -> [a] -> Bool
↓
all f xs :: Bool
↓
all f :: ([a] -> Bool)
-- allという関数にf :: (a->Bool)という引数を渡しているので、最初の引数の型を省略できる関数合成
all f xs = (all f) xs = (and . map f) xs
= and (map f xs)
↓
all f = and . map f
-- 同じ引数が両辺の後ろにある時、その引数を省略して書くことができる