====== {-# LANGUAGE TypeSynonymInstances #-} ======
* allows to use type synonyms as instances
* example:
* code:
main :: IO ()
main = print x1
class MyClass x where
fMy :: x -> x -> x
type Speed = Double
instance MyClass Speed where
fMy xA xB = xA + xB
x1 :: Speed
x1 = fMy 1.3 2.5
* compiler error:
app\Main.hs:9:10: error:
* Illegal instance declaration for `MyClass Speed'
(All instance types must be of the form (T t1 ... tn)
where T is not a synonym.
Use TypeSynonymInstances if you want to disable this.)
* In the instance declaration for `MyClass Speed'
|
9 | instance MyClass Speed where
| ^^^^^^^^^^^^^
* example, with GHC option:
* code:
{-# LANGUAGE TypeSynonymInstances #-}
main :: IO ()
main = print x1
class MyClass x where
fMy :: x -> x -> x
type Speed = Double
instance MyClass Speed where
fMy xA xB = xA + xB
x1 :: Speed
x1 = fMy 1.3 2.5
* compiles, error and warning free, with compiler: GHC 8.10.4, using compiler option -Wall
* executes, with output:
3.8
===== ✎ =====
~~DISCUSSION~~