User Tools

Site Tools


codesnippets:typesynonyminstances

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

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
You could leave a comment if you were logged in.
codesnippets/typesynonyminstances.txt · Last modified: by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki