blob: 1dd90161526d91f8f32c745ab69c5f3ce3986f1a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
{-# LANGUAGE Safe #-}
{-# OPTIONS_GHC -fenable-rewrite-rules #-}
-- | Check rules are disabled under Safe
module Main where
data T = T1 | T2 | T3 deriving ( Eq, Ord, Show )
lookupx :: Ord key => Show val => [(key,val)] -> key -> Maybe val
lookupx [] _ = Nothing
lookupx ((t,a):xs) t' | t == t' = Just a
| otherwise = lookupx xs t'
{-# RULES "lookupx/T" lookupx = tLookup #-}
tLookup :: [(T,a)] -> T -> Maybe a
tLookup [] _ = Nothing
tLookup ((t,a):xs) t' | t /= t' = Just a
| otherwise = tLookup xs t'
space = [(T1,"a"),(T2,"b"),(T3,"c")]
key = T3
main = do
putStrLn $ "looking for " ++ show key
putStrLn $ "in space " ++ show space
putStrLn $ "Found: " ++ show (fromMaybe "Not Found!" $ lookupx space key)
let b | Just "c" <- lookupx space key = "YES"
| otherwise = "NO"
putStrLn $ "Rules Disabled: " ++ b
fromMaybe :: a -> Maybe a -> a
fromMaybe a Nothing = a
fromMaybe _ (Just a) = a
|