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