I have a User
model which has a salt and I'd like to save it in my data base.
My model looks like this:
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
import Database.Persist.TH (mkMigrate, mkPersist, persistLowerCase, share, sqlSettings)
import Data.ByteString (ByteString)
share -- line 50
[mkPersist sqlSettings, mkMigrate "migrateAll"]
[persistLowerCase|
User json
username String
passwordHash String Maybe
salt ByteString
publicRsaKey String
privateRsaKey String
UserName username
|]
but ghc then gives me an error
/workspace/src/Admin.hs:50:1: error:
• No instance for (FromJSON ByteString) arising from a use of ‘.:’
• In the second argument of ‘(<*>)’, namely
‘(obj_a8aN .: T.pack "salt")’
In the first argument of ‘(<*>)’, namely
‘(((pure User <*> (obj_a8aN .: T.pack "username"))
<*> (obj_a8aN .:? T.pack "passwordHash"))
<*> (obj_a8aN .: T.pack "salt"))’
In the first argument of ‘(<*>)’, namely
‘((((pure User <*> (obj_a8aN .: T.pack "username"))
<*> (obj_a8aN .:? T.pack "passwordHash"))
<*> (obj_a8aN .: T.pack "salt"))
<*> (obj_a8aN .: T.pack "publicRsaKey"))’
|
50 | share
| ^^^^^...
/workspace/src/Admin.hs:50:1: error:
• No instance for (ToJSON ByteString) arising from a use of ‘.=’
• In the expression: (T.pack "salt" .= salt_a8aQ)
In the first argument of ‘object’, namely
‘[(T.pack "username" .= username_a8aO),
(T.pack "passwordHash" .= passwordHash_a8aP),
(T.pack "salt" .= salt_a8aQ),
(T.pack "publicRsaKey" .= publicRsaKey_a8aR), ....]’
In the expression:
object
[(T.pack "username" .= username_a8aO),
(T.pack "passwordHash" .= passwordHash_a8aP),
(T.pack "salt" .= salt_a8aQ),
(T.pack "publicRsaKey" .= publicRsaKey_a8aR), ....]
|
50 | share
| ^^^^^...
My question now is how can I store a Data.ByteString
in my database?