私はHaskellで 'のいずれかのデータ構造を学んだし、次のように書かれている:Haskell 'Either'データ型と可読性?
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
[コードレビュー](http://codereview.stackexchange.com/)がこれを尋ねる良い場所かもしれません。 – bwroga
1つの値 '' Match ''(resp。' "No Match" ')だけを使用する予定がある場合、IsPresent(' 'IsNotPresent')に対して' String'と同じ数の型を使うのはなぜですか?最初に 'type IsPresent =();のように1つの値しか持たない型にする方がはるかに意味があります。タイプIsNotPresent =() '。しかし、 'Bool'や' PresentInPhoneBook'と基本的に同じですが、人間には読みにくい 'Either()()'が得られます。だから、これらのすべてのリファクタリングの終わりに、 'Either'や' IsPresent'/'IsNotPresent'タイプを使う代わりに、これらの2つのタイプのうちの1つになります。 –