====== {-# 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~~