summaryrefslogtreecommitdiff
path: root/testsuite/tests/pmcheck/should_compile/T322.hs
blob: 3b8f1a9c7cf4975d3f0b5178db8d4625724abdf8 (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
{-# OPTIONS -fwarn-incomplete-patterns -fwarn-overlapping-patterns -Werror #-}

module T322 where

instance (Num a) => Num (Maybe a) where
  (Just a) + (Just b) = Just (a + b)
  _ + _ = Nothing

  (Just a) - (Just b) = Just (a - b)
  _ - _ = Nothing

  (Just a) * (Just b) = Just (a * b)
  _ * _ = Nothing

  negate (Just a) = Just (negate a)
  negate _ = Nothing

  abs (Just a) = Just (abs a)
  abs _ = Nothing

  signum (Just a) = Just (signum a)
  signum _ = Nothing

  fromInteger = Just . fromInteger

f :: Maybe Int -> Int
f 1       = 1
f Nothing = 2
f _       = 3