7
内部のガード私はLearn you a haskell本をつもりですし、第8章では、このハスケル - case文
data LockerState = Taken | Free deriving (Eq, Show)
type Code = String
type LockerMap = Map.Map Int (LockerState, Code)
lookup' :: Int -> LockerMap -> Either String Code
lookup' num_ map_ =
case (Map.lookup num_ map_) of
Nothing -> Left $ "LockerNumber doesn't exist!"
Just (state, code) -> if state == Taken
then Left $ "LockerNumber already taken!"
else Right $ code
この作品のようなコードのスニペットがあります。
lookup' :: Int -> LockerMap -> Either String Code
lookup' num_ map_ =
case (Map.lookup num_ map_) of
Nothing -> Left $ "LockerNumber doesn't exist!"
Just (state, code) ->
| state == Taken = Left $ "LockerNumber already taken!"
| otherwise = Right $ Code
これはコンパイルされません。しかし、私はこのようなステートメントを守るためのif/elseブロックを変換したかったです。ハスケルでのガードの使用は非常に制限的/直観的ではないようです。 SO Ex1SO Ex2。どの場所で警備員を使うことができるかを私が読むことができる明確な情報源はありますか?
グレート答え!特に「ガードは単にパターンの制約です」 – skgbanga