假設我們有一個模塊,負責將012請求發送到Flickr。我不想將api密鑰硬編碼到Flickr模塊中。 Api鍵可以通過ajax請求獲取。使用默認設置初始化一個模塊(elm或haskell)
對於現在的Flickr的模塊中的每個函數接受apiKey作爲其參數。但是,它並不是那種令人期待的關鍵。有沒有簡單的方法來解決這個問題?或者是否有可能在模塊之間共享某些值而不傳遞每一個函數。
module Flickr where
searchPhotos : String -> String -> ...
searchPhotos apiKey query = ...
getPhotoInfo : String -> String -> ...
getPhotoInfo apiKey photoId = ...
anotherOne : String -> ...
anotherOne apiKey = ...
UPDATE:我有什麼到目前爲止已經試過部分應用功能。最後,我把apiKey像參數一樣。但是現在我必須將這個功能全部通過,還有其他想法嗎?
makeFlickrRequest : (String -> String -> a) -> a
makeFlickrRequest flickrMethod = flickrMethod "myApikey" "mySecret"
photosSearch : String -> String -> String -> ...
photosSearch query apiKey secret =
makeHTTPCallhere ...
-- Usage:
makeFlickrRequest (photosSearch "haskell")
這聽起來像['reader monad']的用例(http://hackage.haskell.org/package/mtl-1.1.0.1/docs/Control-Monad-Reader.html)。 –
你可以偏愛應用所有你的功能的apikey,這是你需要的嗎? – Netwave
@DanielSanchez其實我試過(更新的問題)。但是現在我必須將makeFlickrRequest函數傳遞給需要發出請求的每個模塊。我正在尋找一個更好的選擇:) –