codesnippets:typeclasses
Table of Contents
Type classes and its instances, and the deriving mechanism
- A type class (keyword:
class) is a set of functions declarations that- can have generic default bindings, and
- have instances (keyword:
instance) with type specific bindings.
- module
Preludealready consists of many type classes-
- picture from: Dirk Hünniger
- type
classes are in bold - below all types that have implemented instances
- e.g. type
classNumhas implementedinstances for the following typesIntIntegerFloatDouble
-
- additionally, there is many other libraries available with important type classes
-
- example, implementing an
Enumtype class, and an instance for a data type- functions
succ, andpredhave default implementations inclass Enum,- which have been overridden in the
instance Enum MyIntof
- code:
import Prelude hiding (Enum(..)) main :: IO () main = putStrLn (show x1) class Enum a where succ, pred :: a -> a succ = toEnum . (+ 1) . fromEnum pred = toEnum . (subtract 1) . fromEnum toEnum :: Int -> a fromEnum :: a -> Int data MyInt = C0 | C1 | C2 | C3 instance Enum MyInt where toEnum 0 = C0 toEnum 1 = C1 toEnum 2 = C2 toEnum 3 = C3 fromEnum C0 = 0 fromEnum C1 = 1 fromEnum C2 = 2 fromEnum C3 = 3 succ C3 = C0 succ x = (toEnum . (+ 1) . fromEnum) x pred C0 = C3 pred x = (toEnum . (subtract 1) . fromEnum) x x1 = fromEnum (succ (succ (succ C3)))
- executes, with output:
2
- example, implementing a
Showtype class, and an instance for a data type- function
showis implemented to covert every possible value ofMyIntinto aString - executes, with output:
C3
- example, implementing an
instanceof thePreludeclassShowfor a data type- function
showis implemented again forMyInt - executes, again with output:
C3
Deriving mechanism
Looking to the examples above you may wonder, whether there an easier way to implement an instance of standard type classes. Yes, there is the deriving mechanism.
- example, where a data type applies
derivingmechanism- to implement all function of typeclass
Show, andEnum - executes, again with output:
C2
Advanced type classes
- example, implementing a
Functor- executes, with output:
Just 5
✎
You could leave a comment if you were logged in.
codesnippets/typeclasses.txt · Last modified: by 127.0.0.1


