型と値 Part2

なんかすっごく長い文章ですね! けど、型と値は大切だと思ってます

【複数の型変換】

take 3 [1,2,3] → [1,2,3]

このtake関数を型変換すると

Int -> [a] -> [a]

詳しく解説すると
Int ( take3 )が第一引数で[1,2,3]を第二引数にとり[1,2,3]という返り値になるという意味です
けど、この[a]はどんな型と置き換えてもよいのでした
この場合の[a]は両方とも同じものが入ります
なので

Int -> [Char] -> [Char]
Int -> [Bool] -> [Bool]
Int -> [String] -> [String]
         ・
      ・
      ・

take関数は引数のリストの1部を返す関数なので以上の事が分かると思います

【型の宣言】

firstNLines :: Int -> String -> String                 ……  関数の型宣言
firstNLines n cs = unlines $ take n $ lines cs           ……  関数の定義

詳しく解説すると
firstNLines関数の定義は第一引数がInt 第二引数が String 返り値が String の関数である
関数の定義はcsからn行( 任意の数値 )を持って来て最初のn行( 任意の数値 )を書き出す処理
=cs行のn行( 任意の数値 )を持って来て連結して書き出す
このような処理を行います
明示的に型を宣言するためには〘 :: 〙を使います
また、一般に関数の型宣言は以下のように書きます

関数名 ::  第一引数の型  ->  第二引数の型 -> ……………… ->  返り値の型

すごくすごく時間をかけて書いた型と値でした
実質5時間ぐらいでしょうか (;≧皿≦)。゜°。
よい復習となりました
実際は4章まで終了してるのですが、復習が終わってから次の章に進みます(*≧▽≦)bb