計算機科学のブログ

関数型プログラミングの基礎 - クロージャと部分適用 - APIで使用するURLの生成

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT1(関数型プログラミングの基礎)、LESSON 5(クロージャと部分適用)、5.2(例:APIで使用するURLの生成)、クイックチェック 5-2の解答を求めてみる。

コード

sample2.hs

main :: IO ()
main = do
  print $ myExampleUrlBuilder "1234"


genHostRequestBuider :: [Char] -> [Char] -> [Char] -> [Char] -> [Char]
genHostRequestBuider host apikey resource id = 
    host ++ "/" ++
    resource ++ "/" ++
    id ++ "?token=" ++
    apikey


exampleUrlBuilder :: [Char] -> [Char] -> [Char] -> [Char]
exampleUrlBuilder = genHostRequestBuider "http:://example.com"


genApiRequestBuilder :: (t1 -> t2 -> t3 -> t4) -> t1 -> t2 -> t3 -> t4
genApiRequestBuilder hostBuilder apiKey resource = \id -> hostBuilder apiKey resource id

myExampleUrlBuilder :: [Char] -> [Char]
myExampleUrlBuilder = genApiRequestBuilder exampleUrlBuilder "1337hAsk3ll" "book"

入出力結果(Terminal, Zsh)

% runghc sample2.hs 
"http:://example.com/book/1234?token=1337hAsk3ll"
%