data SRP = Scissors | Rock | Paper deriving (Show)
data Winner = LeftSide | Tie | RightSide deriving (Show)
compareSRP :: SRP -> SRP -> Winner
compareSRP l r =
case (l,r) of
(Scissors, Scissors) -> Tie
(Scissors, Rock) -> RightSide
(Scissors, Paper) -> LeftSide
(Rock, Scissors) -> LeftSide
(Rock, Rock) -> Tie
(Rock, Paper) -> RightSide
(Paper, Scissors) -> RightSide
(Paper, Rock) -> LeftSide
(Paper, Paper) -> Tie
- Haskell에서
data
로 새로운 자료형을 만드는 것은 마치 Siwft의 enum
을 닮았다. 심지어 associated value를 쓸 수도 있다. 자료형의 생성자도 쓸 수 있다. 신기 방기....
- Swift의
switch ~ case
는 Haskell의 판박이다. 패턴 매칭에 대한 예를 아무리 봐도 이해가 안 되더니, Haskell을 만져보고서야 이게 왜 필요한지 알게 되었다... 역시 신기 방기...