{-# LANGUAGE PatternSynonyms #-}

module Sigs where

-- TypeSig
f :: Num a => a -> a
f = undefined

pattern Single :: () => (Show a) => a -> [a]
pattern Single x = [x]

g :: (Show a) => [a] -> a
g (Single x) = x

-- Fixities

infixr  6 +++
infixr  7 ***,///

(+++) :: Int -> Int -> Int
a +++ b = a + 2*b

(***) :: Int -> Int -> Int
a *** b = a - 4*b

(///) :: Int -> Int -> Int
a /// b = 2*a - 3*b

-- Inline signatures

{-# Inline g #-}
{-# INLINE [~34] f #-}

-- Specialise signature

-- Multiple sigs
x,y,z :: Int
x = 0
y = 0
z = 0