我正在學習哈斯克爾「是」的數據結構和寫了下面的:Haskell'無論'數據類型和可讀性?
type PhoneBook = [(String, String)]
createPhoneBook :: PhoneBook --Use function to generate instance of type
createPhoneBook = [("betty","1212-232"),
("billy", "3443-434"),
("derdre", "3232-221")]
data PresentInPhoneBook = Present | NotPresent deriving (Show, Eq) --Either
type IsPresent = String
type IsNotPresent = String
checkPhoneBook :: String -> PhoneBook -> Either IsPresent IsNotPresent
checkPhoneBook name pb = if foldRes == True then Left "Match" else Right "No Match"
where
foldRes = foldl (\acc (key,value) -> if key == name then True else acc) False pb
是否有任何改進,使代碼更易讀?
我很欣賞它的一個簡單的例子,但我只是在這個階段學習。
SO不是一個很好的代碼審查網站,但是在我看來,你希望'checkPhoneBook :: String - > PhoneBook - > Bool'或'... - > PresentInPhoneBook'也可以,如果你有理由對該財產使用特殊類型。 – jberryman
[Code Review](http://codereview.stackexchange.com/)可能是一個更好的地方來問這個問題。 – bwroga
當您只打算使用一個值「Match」(或「No Match」')時,爲什麼要爲'IsPresent'(或者'IsNotPresent')使用一個類型與'String'一樣多的值?比如'type IsPresent =();使它們只有一個值的類型更有意義。鍵入IsNotPresent =()'。但是你會得到'Either()()',這與'Bool'或'PresentInPhoneBook'的機器基本相同,但對人類來說不太可讀。所以在所有這些重構的最後,你最終會選擇這兩種類型中的一種,而不是使用'Either'或'IsPresent' /'IsNotPresent'類型。 –