@@ -65,13 +65,11 @@ import Data.Set as Set
6565import Data.Traversable (traverse)
6666import Data.Tuple.Nested (type (/\), (/\))
6767import Data.URL (URL, addSegment)
68−import Debug (traceM)
6968import Effect.Aff (Aff, bracket, error, throwError)
7069import Effect.Aff.HTTP (Method(..), fetch)
7170import Effect.Aff.HTTP.Request as Request
7271import Effect.Aff.HTTP.Response (Response)
7372import Effect.Aff.HTTP.Response as Response
74−import Effect.Class.Console (log)
7573import Foreign (Foreign, unsafeFromForeign, unsafeToForeign)
7674import Foreign.Object (Object)
7775import Foreign.Object as Object
@@ -94,7 +92,7 @@ data Expr
9492
9593instance EncodeJson Expr where
9694 encodeJson = case _ of
97− Lit l -> encodeJson l
95+ Lit l -> l
9896 Join x y -> encodeJson { join: [ x, y ] }
9997 Union x y -> encodeJson { union: [ x, y ] }
10098 Project proj expr -> encodeJson { proj: { proj: proj, expr: expr } }
@@ -118,14 +116,8 @@ class LiteralRelation r fields | r -> fields where
118116instance (RowList.RowToList fields fields', Relatable fields fields') => LiteralRelation (Array (Record fields)) fields where
119117 lit r = Rel $ Lit $ encodeJson { lit: { attrs: attributeTypes @fields @fields', vals: encodeRelation @fields @fields' <$> r } }
120118
121−else instance
122− ( Newtype r (Record fields)
123− , LiteralRelation (Array (Record field)) fields
124− , RowToList fields fields'
125− , Relatable fields fields'
126− ) =>
127− LiteralRelation (Array r) fields where
128− lit = map unwrap >>> lit
119+else instance (LiteralRelation (Record fields) fields, Newtype r (Record fields)) => LiteralRelation r fields where
120+ lit = unwrap >>> lit
129121
130122rel :: forall @rel fields. Newtype rel (Record fields) => RelVar rel => Rel fields
131123rel = Rel $ RelationVariable (relVar @rel)
@@ -482,7 +474,7 @@ define
482474 => Transaction Unit
483475define = Transaction $ ReaderT $ \{ conn: Connection c, sess } -> do
484476 fetch POST (c `addSegment` "transaction" `addSegment` sessionString sess)
485− { body: Request.json $ jsonToForeign $ encodeJson { define: { name: relVar @rel, attrs: attributeTypes @fields @fields' } } }
477+ { body: Request.json { define: { name: relVar @rel, attrs: Object.fromFoldable (attributeTypes @fields @fields') } } }
486478 >>= Response.guardStatusOk
487479 pure unit
488480
@@ -493,9 +485,8 @@ insert
493485 => Rel fields
494486 -> Transaction Unit
495487insert (Rel r) = Transaction $ ReaderT $ \{ conn: Connection c, sess } -> do
496− traceM $ jsonToForeign $ encodeJson { insert: { name: relVar @rel, rel: r } }
497488 fetch POST (c `addSegment` "transaction" `addSegment` sessionString sess)
498− { body: Request.json $ jsonToForeign $ encodeJson { insert: { name: relVar @rel, rel: r } } }
489+ { body: Request.json { insert: { name: relVar @rel, rel: jsonToForeign (encodeJson r) } } }
499490 >>= Response.guardStatusOk
500491 pure unit
501492
@@ -507,7 +498,7 @@ query
507498 -> Transaction (Array (Record fields))
508499query (Rel r) = Transaction $ ReaderT $ \{ conn: Connection c, sess } -> do
509500 resp <- fetch POST (c `addSegment` "transaction" `addSegment` sessionString sess)
510− { body: Request.json $ jsonToForeign $ encodeJson { query: r } }
501+ { body: Request.json { query: jsonToForeign (encodeJson r) } }
511502 Response.guardStatusOk resp
512503 j <- json resp
513504 case decodeRelation @fields @fields' j of
@@ -519,8 +510,7 @@ decodeRelation
519510 . BuildRelation fields fields'
520511 => Json
521512 -> Either JsonDecodeError (Array (Record fields))
522−decodeRelation j = do
523− decodeRelationJson j >>= traverse (decodeRelationFromObject @fields @fields')
513+decodeRelation j = decodeRelationJson j >>= traverse (decodeRelationFromObject @fields @fields')
524514
525515jsonToForeign :: Json -> Foreign
526516jsonToForeign = unsafeCoerce