-- Copyright 2016 Ertugrul Söylemez
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
{-# OPTIONS_GHC -fno-warn-overflowed-literals #-}
-- |
-- Module: Data.Default
-- Copyright: Copyright 2016 Ertugrul Söylemez
-- License: Apache License 2.0
-- Maintainer: Ertugrul Söylemez <esz@posteo.de>
--
-- This module defines a class for types with a distinguished value that
-- someone considers aesthetically pleasing. If you would like your
-- favourite value featured as the default in the next release, become
-- that someone now! Just create an issue on the
-- <http://hub.darcs.net/esz/acme-default/issues issue tracker>!
module Data.Default
( -- * Default class
Default(..)
)
where
import Data.Int
import Data.Word
-- | A class for types with a distinguished value that someone considers
-- aesthetically pleasing.
class Default a where
-- | The currently selected default value.
def :: a
-- | Current default @def@ chosen by ertes for the same reason as the
-- instance for @()@.
instance Default () where def = def
instance (Default a, Default b) => Default (a, b) where
def = (def, def)
instance (Default a, Default b, Default c) => Default (a, b, c) where
def = (def, def, def)
instance (Default a, Default b, Default c, Default d, Default e) => Default (a, b, c, d, e) where
def = (def, def, def, def, def)
instance (Default a, Default b, Default c, Default d, Default e, Default f) => Default (a, b, c, d, e, f) where
def = (def, def, def, def, def, def)
-- | Current default @'replicate' 4 def@ chosen by mniip, because 4 is a
-- random number.
instance (Default a) => Default [a] where def = replicate 4 def
-- | Current default 'False' chosen by ertes, the answer to the question
-- whether mniip has a favourite 'Bool'.
instance Default Bool where def = False
-- | Current default @'→'@ chosen by sleblanc`, because arrows look
-- fancy when you use them in a chat.
instance Default Char where def = '→'
-- | Current default @1.1102230246251565e-16@ chosen by ertes, the
-- difference between @1@ and @'sum' ('replicate' 10 0.1)@.
instance Default Double where def = 1.1102230246251565e-16
-- | Current default @388.38@ chosen by ertes, because it's beautiful in
-- decimal and approximately equal to twice the molar mass of caffeine
-- in grams per mol.
instance Default Float where def = 388.38
-- | Current default @18871@ chosen by ertes, a beautiful product of a
-- Sophie-Germain prime and a safe prime.
instance Default Int where def = 18871
-- | Current default @29@ chosen by ertes for obvious reasons.
instance Default Int8 where def = 29
-- | Current default @-99@ chosen by ertes, the largest prime that
-- generates a multiplicative subgroup of maximal order modulo @2^16@.
instance Default Int16 where def = -99
-- | Current default @-1@ chosen by ertes, the largest negative number.
instance Default Int64 where def = -1
-- | Current default is Graham's number G chosen by ertes.
instance Default Integer where def = error "Out of memory"
-- | Current default @10@ chosen by ertes, the fifth triangular number
-- that also happens to be the base of the most common positional
-- notation in use for numbers.
instance Default Word where def = 10
-- | Current default @216@ chosen by ertes, the volume of the largest cube
-- with integer side length.
instance Default Word8 where def = 216
-- | Current default @6@ chosen by ertes, the smallest perfect number.
instance Default Word16 where def = 6
-- | Current default @4294967296@ chosen by Axman6 and mniip, because
-- it's equal to @0@.
instance Default Word32 where def = 4294967296
-- | Current default @17@ chosen by ertes. It just looks nice in decimal
-- when written with serifs on the first digit.
instance Default Word64 where def = 17