polyglot-0.1.1.0: src/Conversions/ToScala/Pattern.hs
module Conversions.ToScala.Pattern where
import qualified SyntaxTrees.Haskell.Common as H
import qualified SyntaxTrees.Haskell.Pattern as H
import qualified SyntaxTrees.Scala.Common as S
import qualified SyntaxTrees.Scala.Pattern as S
import Conversions.ToScala.Common (literal, qCtor, qCtorOp, var)
import Data.Maybe (mapMaybe)
pattern' :: H.Pattern -> S.Pattern
pattern' (H.CtorPattern x y) = S.CtorPattern (qCtor x) (pattern' <$> y)
pattern' (H.InfixCtorPattern x y) = S.InfixCtorPattern (qCtorOp x) (pattern' <$> y)
pattern' (H.RecordPattern x y) = S.CtorPattern (qCtor x)
(S.VarPattern . var . fst <$> y)
pattern' (H.WildcardRecordPattern x y) = S.CtorPattern (qCtor x)
(S.VarPattern . var . fst <$> y)
pattern' (H.AliasedPattern x y) = S.AliasedPattern (var x) (pattern' y)
pattern' (H.ListPattern x) = S.CtorPattern (S.QCtor Nothing $ S.Ctor "List") (pattern' <$> x)
pattern' (H.TuplePattern x) = S.TuplePattern $ pattern' <$> x
pattern' (H.VarPattern x) = S.VarPattern $ var x
pattern' (H.LitPattern x) = S.LitPattern $ literal x
pattern' H.Wildcard = S.Wildcard
extractVar :: H.Pattern -> Maybe H.Var
extractVar (H.VarPattern x) = Just x
extractVar _ = Nothing
extractVars :: [H.Pattern] -> [H.Var]
extractVars x = mapMaybe extractVar x
allVars :: [H.Pattern] -> Bool
allVars x = length (mapMaybe extractVar x) == length x
extractVar' :: S.Pattern -> Maybe S.Var
extractVar' (S.VarPattern x) = Just x
extractVar' _ = Nothing
extractVars' :: [S.Pattern] -> [S.Var]
extractVars' x = mapMaybe extractVar' x
allVars' :: [S.Pattern] -> Bool
allVars' x = length (mapMaybe extractVar' x) == length x