Ticket #3126: PMOrderSpec.hs

File PMOrderSpec.hs, 960 bytes (added by claus, 6 years ago)

Observing pattern match order via Num and IsString

Line 
1{-# LANGUAGE ViewPatterns #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Main where
4import Data.String
5
6-- {{{ Num literals
7newtype N = N Int deriving (Show,Eq)
8
9instance Num N where
10  fromInteger 0 = error "0"
11  fromInteger 1 = N 0
12  fromInteger _ = N 1
13
14f x = case x of
15        1 -> False
16        0 -> True
17
18g x = case x of
19        1 -> False
20        _ -> case x of
21              0 -> True
22              _ -> error "No match"
23
24testNum = do
25  print $ g (N 0)
26  print $ f (N 0)
27
28-- }}}
29
30-- {{{ IsString literals
31newtype S = S String deriving Eq
32
33instance IsString S where 
34  fromString []    = error "[]"
35  fromString (_:_) = S "."
36
37fs x = case x of
38        "." -> False
39        ""  -> True
40
41gs x = case x of
42        "." -> False
43        _   -> case x of
44                 "" -> True
45                 _  -> error "No match"
46
47testIsString = do
48  print $ gs (S ".")
49  print $ fs (S ".")
50
51-- }}}
52
53main = testNum