<div dir="ltr"><div>Hello, I am wanting to store something in a database, then retrieve it.</div><div>That is my entire ambition for the day.</div><div><br></div><div>Technologies chosen:</div><div>spock:</div><div>  <a href="https://github.com/agrafix/Spock">https://github.com/agrafix/Spock</a></div><div>rethinkdb driver:</div><div>  <a href="https://github.com/AtnNn/haskell-rethinkdb">https://github.com/AtnNn/haskell-rethinkdb</a></div><div><br></div><div>I chose to go with Rethinkdb, but i'm open to using Postgresql.</div><div><br></div><div>If someone requests for /companies, I want to list all the companies in the "companies" table.</div><div>```</div><div>-- ghci</div><div>λ> companies <- run h $ table "companies" :: IO [Datum]</div><div>λ> companies</div><div>[{"name":"tesla","id":"7781ee7e-1e43-4608-bb96-fe10cac3b53a"}]</div><div>λ> firstCompany <- run h $ table "companies" ! "name" :: IO [Datum]</div><div>λ> firstCompany</div><div>["tesla"]</div><div>λ> :info Datum</div><div>data Datum</div><div>  = Null</div><div>  | Bool Bool</div><div>  | String Text</div><div>  | Number Double</div><div>  | Array Database.RethinkDB.Datum.Array</div><div>  | Object Database.RethinkDB.Datum.Object</div><div>  | Time time-1.5.0.1:Data.Time.LocalTime.LocalTime.ZonedTime</div><div>  | Point LonLat</div><div>  | Line GeoLine</div><div>  | Polygon GeoPolygon</div><div>  | Binary bytestring-0.10.6.0:Data.ByteString.Internal.ByteString</div><div>    -- Defined in ‘Database.RethinkDB.Datum’</div><div>instance Eq Datum -- Defined in ‘Database.RethinkDB.Datum’</div><div>instance Ord Datum -- Defined in ‘Database.RethinkDB.Datum’</div><div>instance Show Datum -- Defined in ‘Database.RethinkDB.Datum’</div><div>instance Expr Datum -- Defined in ‘Database.RethinkDB.ReQL’</div><div>instance Result Datum -- Defined in ‘Database.RethinkDB.Driver’</div><div>instance ToDatum Datum -- Defined in ‘Database.RethinkDB.Datum’</div><div>instance FromDatum Datum -- Defined in ‘Database.RethinkDB.Datum’</div><div>15:40 < lpaste> xuxu revised “investigating the Datum</div><div>                data type”: “investigating the Datum data</div><div>                type” at <a href="http://lpaste.net/179391">http://lpaste.net/179391</a></div><div>```</div><div><br></div><div>I don't know how to display the result.</div><div><br></div><div>From Spock's readme, here's an example where I don't need to query the database:</div><div>```</div><div>main =</div><div>     runSpock 3000 $ spockT id $</div><div>     do get "companies" $</div><div>            text $ T.concat ["tesla", "google"]</div><div>```</div><div>How to convert that into something a little more practial where I do utilize a db?</div><div>Here's what I have right now, but I'm sure it doesn't compile</div><div>```</div><div>{-# LANGUAGE OverloadedStrings #-}</div><div><br></div><div>import Web.Spock</div><div>import qualified Data.Text as T</div><div>import qualified Database.RethinkDB as R</div><div>import qualified Database.RethinkDB.NoClash</div><div><br></div><div>default (Datum, ReQL, String, Int, Double)</div><div><br></div><div>main :: IO ()</div><div>main =</div><div>    -- 1. i don't know if the following line will work</div><div>    let h = connect "localhost" 28015 Nothing in</div><div>        runSpock 3000 $ spockT id $</div><div>        -- 2. list all companies</div><div>        do get "companies" $</div><div>               text $ T.concat -- something </div><div><br></div><div>```</div><div>I don't exactly know how "text" works.</div><div><br></div><div>If I'm reading </div><div><a href="https://github.com/agrafix/Spock/blob/1ee54503ad67f62af795a31772040f56f7ae08fd/Spock-core/src/Web/Spock/Core.hs#L55">https://github.com/agrafix/Spock/blob/1ee54503ad67f62af795a31772040f56f7ae08fd/Spock-core/src/Web/Spock/Core.hs#L55</a></div><div>correctly, spockT is using a reader monad. I don't know how it works with the Text type, but I have a suspicion I need to convert Rethink's Datum type into a Text type.</div><div><br></div><div>I would be absolutely thrilled if anyone is able to help with this.</div><div><br></div></div>