packages feed

polyglot-0.1.1.0: src/Conversions/ToPurescript/ClassDef.hs

module Conversions.ToPurescript.ClassDef where

import qualified SyntaxTrees.Haskell.ClassDef    as H
import qualified SyntaxTrees.Purescript.ClassDef as P

import Conversions.ToPurescript.Common  (class')
import Conversions.ToPurescript.DataDef (derivingStrategy)
import Conversions.ToPurescript.FnDef   (fnDefOrSig)
import Conversions.ToPurescript.Type    (anyKindedType, classConstraint,
                                         typeParam)


classDef :: H.ClassDef -> P.ClassDef
classDef (H.ClassDef x y z t) =
  P.ClassDef (classConstraint <$> x) (class' y)
             (typeParam <$> z) (fnDefOrSig <$> t)


instanceDef :: H.InstanceDef -> P.InstanceDef
instanceDef (H.InstanceDef x y z t) =
  P.InstanceDef (classConstraint <$> x) Nothing (class' y)
                (anyKindedType <$> z) (fnDefOrSig <$> t)

derivingDef :: H.DerivingDef -> P.DerivingDef
derivingDef (H.DerivingDef x y z t _) =
  P.DerivingDef (derivingStrategy x) (classConstraint <$> y)
                Nothing (class' z) (anyKindedType <$> t)