module Conversions.ToScala.ClassDef where import qualified SyntaxTrees.Haskell.ClassDef as H import qualified SyntaxTrees.Haskell.Common as H import qualified SyntaxTrees.Scala.Common as S import qualified SyntaxTrees.Scala.DataDef as S import qualified SyntaxTrees.Scala.FnDef as S import qualified SyntaxTrees.Scala.Type as S import Conversions.ToScala.FnDef (fnDefOrSigs, fnDefs) import Conversions.ToScala.Type (anyKindedType, classConstraint, findAnyKindedTypeParams, typeParam, usingArgList) import Data.Foldable (Foldable (toList)) classDef :: H.ClassDef -> S.TraitDef classDef :: ClassDef -> TraitDef classDef (H.ClassDef [ClassConstraint] x (H.Class String y) [TypeParam] z [FnDefOrSig] t) = [Modifier] -> TypeCtor -> [TypeParam] -> [ArgList] -> [UsingArgList] -> [Type] -> [InternalDef] -> TraitDef S.TraitDef [] (String -> TypeCtor S.TypeCtor String y) (TypeParam -> TypeParam typeParam forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [TypeParam] z) [] [[ClassConstraint] -> UsingArgList usingArgList forall a b. (a -> b) -> a -> b $ ClassConstraint -> ClassConstraint classConstraint forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [ClassConstraint] x] [] (InternalFnDef -> InternalDef S.Fn forall b c a. (b -> c) -> (a -> b) -> a -> c . (Maybe FnSig, Maybe [FnDef]) -> InternalFnDef fnDefs forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [FnDefOrSig] -> [(Maybe FnSig, Maybe [FnDef])] fnDefOrSigs [FnDefOrSig] t) instanceDef :: H.InstanceDef -> S.GivenDef instanceDef :: InstanceDef -> GivenDef instanceDef (H.InstanceDef [ClassConstraint] x (H.Class String y) [AnyKindedType] z [FnDefOrSig] t) = [Modifier] -> Maybe Var -> [TypeParam] -> [UsingArgList] -> Type -> Either FnBody [InternalFnDef] -> GivenDef S.GivenDef [] forall a. Maybe a Nothing (forall a. Monoid a => [a] -> a mconcat ((TypeParam -> TypeParam typeParam <$>) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (t :: * -> *) a. Foldable t => t a -> [a] toList forall b c a. (b -> c) -> (a -> b) -> a -> c . AnyKindedType -> Set TypeParam findAnyKindedTypeParams forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [AnyKindedType] z)) [[ClassConstraint] -> UsingArgList usingArgList forall a b. (a -> b) -> a -> b $ ClassConstraint -> ClassConstraint classConstraint forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [ClassConstraint] x] (QTypeCtor -> [Type] -> Type S.CtorTypeApply (Maybe Package -> TypeCtor -> QTypeCtor S.QTypeCtor forall a. Maybe a Nothing forall a b. (a -> b) -> a -> b $ String -> TypeCtor S.TypeCtor String y) forall a b. (a -> b) -> a -> b $ AnyKindedType -> Type anyKindedType forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [AnyKindedType] z) (forall a b. b -> Either a b Right forall a b. (a -> b) -> a -> b $ (Maybe FnSig, Maybe [FnDef]) -> InternalFnDef fnDefs forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [FnDefOrSig] -> [(Maybe FnSig, Maybe [FnDef])] fnDefOrSigs [FnDefOrSig] t) derivingDef :: H.DerivingDef -> S.GivenDef derivingDef :: DerivingDef -> GivenDef derivingDef (H.DerivingDef DerivingStrategy _ [ClassConstraint] x (H.Class String y) [AnyKindedType] z Maybe Class _) = [Modifier] -> Maybe Var -> [TypeParam] -> [UsingArgList] -> Type -> Either FnBody [InternalFnDef] -> GivenDef S.GivenDef [] forall a. Maybe a Nothing (forall a. Monoid a => [a] -> a mconcat ((TypeParam -> TypeParam typeParam <$>) forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (t :: * -> *) a. Foldable t => t a -> [a] toList forall b c a. (b -> c) -> (a -> b) -> a -> c . AnyKindedType -> Set TypeParam findAnyKindedTypeParams forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [AnyKindedType] z)) [[ClassConstraint] -> UsingArgList usingArgList forall a b. (a -> b) -> a -> b $ ClassConstraint -> ClassConstraint classConstraint forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [ClassConstraint] x] (QTypeCtor -> [Type] -> Type S.CtorTypeApply (Maybe Package -> TypeCtor -> QTypeCtor S.QTypeCtor forall a. Maybe a Nothing forall a b. (a -> b) -> a -> b $ String -> TypeCtor S.TypeCtor String y) forall a b. (a -> b) -> a -> b $ AnyKindedType -> Type anyKindedType forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [AnyKindedType] z) (forall a b. a -> Either a b Left forall a b. (a -> b) -> a -> b $ FnVar -> FnBody S.FnVar' forall a b. (a -> b) -> a -> b $ QVar -> FnVar S.Var' (Maybe Package -> Var -> QVar S.QVar forall a. Maybe a Nothing forall a b. (a -> b) -> a -> b $ String -> Var S.Var String "derived"))