This repository has been archived by the owner on Sep 28, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStellar.hs
53 lines (47 loc) · 1.57 KB
/
Stellar.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{-# LANGUAGE DefaultSignatures #-}
module Control.Monad.Stellar
( MonadStellar
, accountDetails
, accountTransactions
) where
import Named
import Protolude
import Stellar.Client.Types
import Control.Monad.Trans (MonadTrans)
import Control.Monad.Trans.Cont (ContT)
import Control.Monad.Trans.RWS (RWST)
import Control.Monad.Trans.Writer (WriterT)
class Monad m => MonadStellar m where
accountDetails :: AccountId -> m AccountDetails
default accountDetails
:: (MonadTrans t, MonadStellar m1, m ~ t m1)
=> AccountId
-> m AccountDetails
accountDetails = lift . accountDetails
accountTransactions
:: AccountId
-> "cursor" :? Maybe Cursor
-> "order" :? Maybe SortOrder
-> "limit" :? Maybe Int
-> m ([TransactionDetails], Cursor)
default accountTransactions
:: (MonadTrans t, MonadStellar m1, m ~ t m1)
=> AccountId
-> "cursor" :? Maybe Cursor
-> "order" :? Maybe SortOrder
-> "limit" :? Maybe Int
-> m ([TransactionDetails], Cursor)
accountTransactions acc
(argDef #cursor Nothing -> cursor)
(argDef #order Nothing -> order)
(argDef #limit Nothing -> limit)
= lift $ accountTransactions acc
! #cursor cursor
! #order order
! #limit limit
instance MonadStellar m => MonadStellar (ReaderT r m)
instance (MonadStellar m, Monoid w) => MonadStellar (WriterT w m)
instance MonadStellar m => MonadStellar (StateT s m)
instance (MonadStellar m, Monoid w) => MonadStellar (RWST r w s m)
instance MonadStellar m => MonadStellar (ExceptT e m)
instance MonadStellar m => MonadStellar (ContT r m)