Skip to content

Commit

Permalink
handle package and object for scala3
Browse files Browse the repository at this point in the history
  • Loading branch information
lemastero committed Nov 4, 2024
1 parent 8c6d31d commit 89b3f8a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
5 changes: 2 additions & 3 deletions scala3/src/main/scala/examples/adts.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package examples

object adts:

sealed trait Rgb
case object Red extends Rgb
case object Green extends Rgb
Expand All @@ -10,9 +9,9 @@ object adts:
sealed trait Bool
case object True extends Bool
case object False extends Bool

final case class RgbPair(snd: Bool, fst: Rgb)

def idRgb(theArg: Rgb): Rgb = theArg

def constRgbPair(rgbArg: Rgb, rgbPairArg: RgbPair): RgbPair = rgbPairArg
20 changes: 12 additions & 8 deletions src/Agda/Compiler/Scala/PrintScala3.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,13 @@ import Agda.Compiler.Scala.ScalaExpr ( ScalaName, ScalaExpr(..), SeVar(..))
printScala3 :: ScalaExpr -> String
printScala3 def = case def of
(SePackage pNames defs) ->
(printPackageAndObject pNames) <> exprSeparator
<> bracket (
blankLine -- between package declaration and first definition
<> combineLines (map printScala3 defs)
)
(printPackageAndObject pNames)
<> bracket (map printScala3 defs)
<> blankLine -- EOF
(SeSum adtName adtCases) ->
(printSealedTrait adtName)
<> defsSeparator
<> combineLines (map (printCaseObject adtName) adtCases)
<> combineLinesWithIndent indent (map (printCaseObject adtName) adtCases)
<> defsSeparator
(SeFun fName args resType funBody) ->
"def" <> exprSeparator <> fName
Expand Down Expand Up @@ -67,8 +64,9 @@ printPackage pNames = "package" <> exprSeparator <> (intercalate "." pNames)
printObject :: ScalaName -> String
printObject pName = "object" <> exprSeparator <> pName

bracket :: String -> String
bracket str = "{\n" <> str <> "\n}"
bracket :: [String] -> String
bracket str = ":" <> defsSeparator <> (combineLinesWithIndent indent str)
-- -- TODO Scala3 indents

defsSeparator :: String
defsSeparator = "\n"
Expand All @@ -79,8 +77,14 @@ blankLine = "\n"
exprSeparator :: String
exprSeparator = " "

indent :: String
indent = " "

strip :: String -> String
strip xs = (reverse $ dropWhile (== '\n') (reverse xs))

combineLines :: [String] -> String
combineLines xs = strip $ unlines (filter (not . null) xs)

combineLinesWithIndent :: String -> [String] -> String
combineLinesWithIndent indent xs = strip $ unlines (fmap (\x -> indent ++ x) (filter (not . null) xs))

0 comments on commit 89b3f8a

Please sign in to comment.