@@ -2,10 +2,8 @@ module Main (main) where
3import Control.Monad.Writer.Strict
3import Control.Monad.Writer.Strict
4import Data.Aeson hiding (Options)
4import Data.Aeson hiding (Options)
5−import Data.Aeson.Types (Parser)
6import Data.HashMap.Strict qualified as HM
5import Data.HashMap.Strict qualified as HM
7import Data.Map.Lazy qualified as M
6import Data.Map.Lazy qualified as M
8−import Data.Text qualified as T
9import Data.Vector (Vector)
7import Data.Vector (Vector)
10import Data.Vector qualified as V
8import Data.Vector qualified as V
11import Data.Yaml as Yaml
9import Data.Yaml as Yaml
@@ -70,10 +68,25 @@ elm datattypes =
70 in makeElmModuleFromETypeDef "Bridge" types
68 in makeElmModuleFromETypeDef "Bridge" types
72elmType :: Text -> Datatype -> Writer [ETypeDef] EType
70elmType :: Text -> Datatype -> Writer [ETypeDef] EType
73−elmType name BoolType = pure $ ETyCon $ ETCon "Bool"
71+elmType _ BoolType = pure $ ETyCon $ ETCon "Bool"
74−elmType name IntType = pure $ ETyCon $ ETCon "Int"
72+elmType _ IntType = pure $ ETyCon $ ETCon "Int"
75−elmType name FloatType = pure $ ETyCon $ ETCon "Float"
73+elmType _ FloatType = pure $ ETyCon $ ETCon "Float"
76−elmType name StringType = pure $ ETyCon $ ETCon "String"
74+elmType _ StringType = pure $ ETyCon $ ETCon "String"
75+elmType name (List inner) = do
76+ -- fields' <- traverse (\(k, v) -> (toString k,) <$> elmType (name <> "_" <> k) v) $ M.toList fields
77+ inner' <- elmType name inner
83+ { et_name = toString name <> "_List",
86+ epa_type = ETyApp (ETyCon (ETCon "List")) inner'
89+ pure $ ETyCon $ ETCon $ toString name
77elmType name (ProductType fields) = do
90elmType name (ProductType fields) = do
78 fields' <- traverse (\(k, v) -> (toString k,) <$> elmType (name <> "_" <> k) v) $ M.toList fields
91 fields' <- traverse (\(k, v) -> (toString k,) <$> elmType (name <> "_" <> k) v) $ M.toList fields
@@ -125,6 +138,34 @@ psType _ BoolType = pure psBool
125psType _ IntType = pure psInt
138psType _ IntType = pure psInt
126psType _ FloatType = pure psNumber
139psType _ FloatType = pure psNumber
127psType _ StringType = pure psString
140psType _ StringType = pure psString
141+psType name (List inner) = do
142+ inner' <- psType name inner
145+ { _typePackage = "bridge",
146+ _typeModule = "Bridge",
147+ _typeName = name <> "_List",
148+ _typeParameters = []
154+ { _sigConstructor = name <> "_List",
158+ { _typePackage = "builtins",
159+ _typeModule = "Prim",
160+ _typeName = "Array",
161+ _typeParameters = [inner']
128psType name (SumDatatype (SumType sums)) = do
169psType name (SumDatatype (SumType sums)) = do
129 sums' <- traverse (\(k, v) -> (k,) <$> traverse (psType (name <> "_" <> k)) v) $ M.toList sums
170 sums' <- traverse (\(k, v) -> (k,) <$> traverse (psType (name <> "_" <> k)) v) $ M.toList sums