Upgrade stack to lts-7.16
HMDM3B557TO5RYP2IGFFC2C2VN6HYZTDQ47CJY2O37BW55DSMFZAC Q5X5RYQLP5K7REYD6VLHOKC4W36ZELJYA45V6YFKTD5S6MPN3NDQC DFOBMSAODB3NKW37B272ZXA2ML5HMIH3N3C4GT2DPEQS7ZFK4SNAC HALRDT2F22DAQ54M334YSKD2XJCAXDXEZPDKGMOWKH7XELBAS6MAC 64C6AWH66FDKU6UE6Z6JPX2J2GBM2JOPTH2GL6LHKAIUBGNGDZ5AC WO2MINIF4TXOHWSE7JWXRZYN64XRVLYIRFMF4SMPSOXKA2V77KMQC 2XQD6KKKD6QVHFHAEMVE3XXY7X2T7BLTLL7XIILZAXNJJH2YONUQC KEP5WUFJXTMKRRNZLYTGYYWA4VLFCMHTKTJYF5EA5IWBYFMU6WYQC M4KM76DGO77VC4O6N5FFA5MTZH5GI5AJ3OUJU7INLAOY2M3LRLLAC ZP62WC472OTQETO2HTHIQIPO57XZIWVKPA4KL62GYU4OZDMB6NSAC OBFPJS2GHO2PEHBHGEHKIUOUAFIQHPIZXEVD2YIE3ZIE2PVMH5VAC Y3LIJ5USPMYBG7HKCIQBE7MWVGLQJPJSQD3KPZCTKXP22GOB535QC PBD7LZYQHXAA3KLH2ZUX5GW4UFML6BQ32KXZF4KZ6OYFASUYFJ5QC RPAJLHMTUJU4AYNBOHVGHGGB4NY2NLY3BVPYN5FMWB3ZIMAUQHCQC QMRKFEPGFBCEWAIXPEIG5ILKAJ2JH5L3TOITHR4HNJXK5FN3KXBQC EKI57EJR65DA5FPILAHGHHAIU5ITVGHA6V3775OX7GV5XD67OWRQC 5DRIWGLUKMQZU2ZPBXSTLAWJKAMOD5YXAHM5LEDQHDFGYYLHWCDQC POX3UAMTGCNS3SU5I6IKDNCCSHEAUSFBZ3WCMQ3EXKPNXETOI6BAC 7KZP4RHZ3QSYTPPQ257A65Z5UPX44TF2LAI2U5EMULQCLDCEUK2AC LHJ2HFXVUQ4VG25I7DADWU73G5K5WNZBDQ3SVNKFYLZ5BEYM4XCQC UUR6SMCAJMA7O3ZFUCQMPZFDDIPUVQ5IHUAC5F252YVD6H3JIKPQC ASF3UPJLCX7KIUCNJD5KAXSPDXCUEJHLL4HBRTRUBPCW73IXOCWQC WZUHEZSBRKHQMNWDKVG4X6DDIQEAXTGI6IGAJ5ERPRQ3W2KUMX4QC TCOAKCGGHOIRJCTZYEZQ3K6KCGL2LGAYGYFRGSPCHBTJJY2V6AXAC 6L5BK5EHPAOQX3JCKUJ273UDNAC23LPQL4HIJGM4AV3P3QK5OKIQC IZEVQF627FA7VV25KJAWYWGGC35LZUUBBQRPN5ZAINTQLPEDRTEAC GCVQD44VRPQVKPZEPIC4AOIXLJIG2ZMV3QI2Y7KALUT6NVUBSGSAC 73NDXDEZRMK672GHSTC3CI6YHXFZ2GGJI5IKQGHKFDZKTNSQXLLQC O227CEAV7BTKSE3SSC7XHC5IWEBXZL2AOOKJMBMOOFNTLINBLQMAC NEDDHXUK3GNFMOFO3KLU7NRIHCTYNWBT3D6HTKZAOXFDE6HMDZ6AC LD4GLVSF6YTA7OZWIGJ45H6TUXGM4WKUIYXKWQFNUP36WDMYSMXAC EKY7U7SKPF45OOUAHJBEQKXSUXWOHFBQFFVJWPBN5ARFJUFM2BPAC RN7EI6INGUUHGMNY5RU3NH56WPLRZY5ZMYDNFMNE3TGV4ESFLQIAC Z7KS5XHHC6PAMTVBHXY7KUSS3BWAOU6FSYIITUCFOOJZU4OUJHBAC O5FVTOM6YFBLEPF3S576K6IMT6ZZ5VQCSB3YVXNS4CKBITKCRZ7AC 3QVT6MA6I2CILQH3LUZABS4YQ7MN6CNRYTDRVS376OOHTPLYTFJAC A6HKMINBNGQLLX4QJMYWKQ4JAEHVJ4HIRVDKPPDI3FJUO2AAB7OQC TNR3TEHKVADAEZSTOD2XLSUTSW5AWST2YUW4CWK5KE7DSC6XHZNAC QADKFHAR3KWQCNYU25Z7PJUGMD5WL26IU3DOAHBTRN2A7NKPUPKAC NLZ3JXLOOIL37O3RRQWXHNPNSNEOOLPD6MCB754BEBECQB3KGR2AC NAS4BFL43SIUAAC663R6VFBHQ2DKI45K6Y6ZKVQI7S5547HBAN7QC FXJQACESPGTLPG5ELXBU3M3OQXUZQQIR7HPIEHQ3FNUTMWVH4WBAC 5OI44E4EEVYOMHDWNK2WA7K4L4JWRWCUJUNN2UAUGE5VY4W7GTNAC MB5SHULBN3WP7TGUWZDP6BRGP423FTYKF67T5IF5YHHLNXKQ5REAC W35DDBFYF6Z4ZPCFEO5RPAONZLYCSNTXUSTS6FIUUVZHCI6Q7GHAC Z3MK2PJ5U222DXRS22WCDHVPZ7HVAR3HOCUNXIGX6VMEPBQDF6PQC WAIX6AGNDVJOKTWZ7OP7QOYSJHAJSX5EOWXZHOAO2IG6ALWUCJ6QC 4U7F3CPIDTK6JSEDMNMHVKSR7HOQDLZQD2PPVMDLHO5SFSIMUXZAC NVOCQVASZWTKQJG7GPH7KHKZZR7NUG4WLV5YY4KAIRPCJRWCZPIAC Y35QCWYW2OTZ27ZVTH2BA3XJTUCJ2WMLKU32ZCOCDY3AW7TIZXRAC V2VDN77HCSRYYWXDJJ2XOVHV4P6PVWNJZLXZ7JUYPQEZQIH5BZ3QC LCBJULKEU4I5FRUGYNRQSHXYLY5X3LRTSNWDCTZLS7YE4BBBDE6AC I2KHGVD44KT4MQJXGCTVSQKMBO6TVCY72F26TLXGWRL6PHGF6RNQC XTBSG4C7SCZUFOU2BTNFR6B6TCGYI35BWUV4PVTS3N7KNH5VEARQC BROSTG5KP3NUNLSYPVQID254TE47E5RKQAKLPIY7PGWETE6JNMTAC BXGLKYRXO2O4NRM3BLNWQ7AWVPQXAMFS57MFYHJNOZZEZZW5BH6AC KNSI575VAW6HRCZYXOEPQ4DTSML4EORML5MV4DJBRKE7TXCPS4EAC UILI6PILCRDPZ3XYA54LGIGPSU7ERWNHCE7R3CE64ZEC7ONOEMOQC ADMKQQGCGVSHHIMVQ4XFRDCG544SBJCYALSKZV45CQQBZ4ACUH2AC AXKKXBWN4EMUOLV43WN52JSKJPBV7TLSGLNJW5EZXHSJNKCYUWOQC base >= 4.8.0, bippy == 0.1.0.0, classy-prelude == 0.12.*, aeson >= 0.11.2, attoparsec == 0.13.*, base64-bytestring == 1.0.*
base, bippy, classy-prelude, aeson, attoparsec, base64-bytestring
, groups >= 0.4 && < 0.5, haskoin-core >= 0.4, heaps >= 0.3.1 && < 0.4, hourglass >= 0.2.6 && < 0.3, HsOpenSSL >= 0.11 && < 0.12
, groups, haskoin-core, heaps, hourglass
, resource-pool-catchio, smtp-mail >= 0.1.4.5, snap >= 0.14, snap-core >= 0.9 && < 0.11, snap-server >= 0.9 && < 0.11, snaplet-postgresql-simple >= 0.6 && < 0.11
--, resource-pool-catchio, smtp-mail, snap, snap-core, snap-server, snaplet-postgresql-simple
data Billable' (p :: *) (u :: *) (c :: *) = Billable{ _project :: p, _creator :: u, _name :: Text, _description :: Text, _recurrence :: Recurrence, _amount :: c, _gracePeriod :: Days}makeLenses ''Billable'type Billable = Billable' ProjectId UserId Satoshi
type Subscription = Subscription' BillableId
uidParser :: FieldParser UserIduidParser f v = UserId <$> fromField f vpidParser :: FieldParser P.ProjectIdpidParser f v = P.ProjectId <$> fromField f vsecondsParser :: FieldParser SecondssecondsParser f v = Seconds <$> fromField f v
uidParser :: RowParser UserIduidParser = UserId <$> field
let err = ConversionFailed { errSQLType = "text", errSQLTableOid = tableOid f, errSQLField = maybe "" B.unpack (name f), errHaskellType = "BtcAddr", errMessage = "could not deserialize value to a valid BTC address"}maybe (conversionError err) pure addrMay
let err = returnError ConversionFailed f "could not deserialize value to a valid BTC address"maybe err pure addrMay
recurrenceParser :: RowParser BI.RecurrencerecurrenceParser =let prec :: Text -> RowParser BI.Recurrenceprec "annually" = nullField *> pure BI.Annuallyprec "monthly" = BI.Monthly <$> fieldprec "semimonthly" = nullField *> pure BI.SemiMonthlyprec "weekly" = BI.Weekly <$> fieldprec "onetime" = nullField *> pure BI.OneTimeprec _ = emptyin field >>= prec
parser "credit_to_user" = CreditToUser <$> (nullField *> fieldWith uidParser <* nullField)parser "credit_to_project" = CreditToProject <$> (nullField *> nullField *> fieldWith pidParser)
parser "credit_to_user" = CreditToUser <$> (nullField *> uidParser <* nullField)parser "credit_to_project" = CreditToProject <$> (nullField *> nullField *> pidParser)
BI.Billable <$> fieldWith pidParser<*> fieldWith uidParser<*> field<*> field<*> recurrenceParser<*> fieldWith btcParser<*> (Days <$> field)
B.Billable <$> pidParser<*> uidParser<*> field<*> field<*> recurrenceParser<*> btcParser<*> (Days <$> field)<*> fieldWith (optionalField nominalDiffTimeParser)recurrenceParser :: RowParser B.RecurrencerecurrenceParser =let prec :: Text -> RowParser B.Recurrenceprec "annually" = nullField *> pure B.Annuallyprec "monthly" = B.Monthly <$> fieldprec "semimonthly" = nullField *> pure B.SemiMonthlyprec "weekly" = B.Weekly <$> fieldprec "onetime" = nullField *> pure B.OneTimeprec _ = emptyin field >>= precsubscriptionParser :: RowParser B.SubscriptionsubscriptionParser =B.Subscription <$> (B.BillableId <$> field)<*> (toThyme <$> field)<*> ((fmap toThyme) <$> field)
storeEvent (CreateSubscription uid bid) =Just $ storeEventJSON uid "create_subscription" (subscriptionJSON uid bid)
storeEvent (CreateSubscription uid s) =Just $ storeEventJSON uid "create_subscription" (createSubscriptionJSON uid s)
, b ^. BI.name, b ^. BI.description, b ^. (BI.recurrence . to BI.recurrenceName), b ^. (BI.recurrence . to BI.recurrenceCount), b ^. (BI.amount . satoshi), b ^. (BI.gracePeriod . _Days)
, b ^. B.name, b ^. B.description, b ^. (B.recurrence . to B.recurrenceName), b ^. (B.recurrence . to B.recurrenceCount), b ^. (B.amount . satoshi), b ^. (B.gracePeriod . _Days)
(uid ^. _UserId, bid ^. BI._BillableId, eventId ^. _EventId)
(uid ^. _UserId, s ^. (B.billable . B._BillableId), eventId ^. _EventId)pgEval (FindSubscriptions uid pid) =pquery ((,) <$> subscriptionIdParser <*> subscriptionParser)"SELECT id, billable_id, start_date, end_date \\FROM subscriptions s \\JOIN billables b ON b.id = s.billable_id \\WHERE s.user_id = ? \\AND b.project_id = ?"(uid ^. _UserId, pid ^. P._ProjectId)
raiseOpForbidden :: UserId -> OpForbiddenReason -> DBOp x -> DBOp xraiseOpForbidden uid r = RaiseDBError (OpForbidden uid r)
class (Monad m) => MonadDB (m :: * -> *) whereliftdb :: DBOp x -> m xinstance MonadDB (Program DBOp) whereliftdb = fc
raiseSubjectNotFound :: DBOp y -> DBOp xraiseSubjectNotFound = RaiseDBError SubjectNotFound
raiseOpForbidden :: (MonadDB m) => UserId -> OpForbiddenReason -> DBOp x -> m xraiseOpForbidden uid r op = liftdb $ RaiseDBError (OpForbidden uid r) op
missing = raiseSubjectNotFound actfc $ maybe missing (\(_, uid', _) -> if uid' == uid then act else forbidden) ev
missing = raiseSubjectNotFound actmaybe missing (\(_, uid', _) -> if uid' == uid then liftdb act else forbidden) ev
--createPaymentRequest :: BillableId -> DBProg PaymentRequestId--createPaymentRequest bid = do-- billable <- readBillable bid
findSubscriptions :: (MonadDB m)=> UserId-> ProjectId-> m [(SubscriptionId, Subscription' Billable)]findSubscriptions uid pid = dosubscriptions <- liftdb $ FindSubscriptions uid pidlet sub'' s = sequenceA <$> traverse readBillable ssub' (sid, s) = fmap (fmap (sid,)) (sub'' s)catMaybes <$> traverse sub' subscriptions
subscriptionJSON :: UserId -> B.BillableId -> ValuesubscriptionJSON uid bid = v1 $obj [ "userId" .= tshow (uid ^. _UserId), "billableId" .= tshow (bid ^. B._BillableId)
createSubscriptionJSON :: UserId -> B.Subscription -> ValuecreateSubscriptionJSON uid sub = v1 $obj [ "user_id" .= tshow (uid ^. _UserId), "billable_id" .= tshow (sub ^. (B.billable . B._BillableId))
{-# LANGUAGE TemplateHaskell #-}module Aftok.Payments.Types whereimport ClassyPreludeimport Control.Lens (makeLenses, makePrisms)import Data.Thyme.Clock as Cimport Data.UUIDimport qualified Network.Bippy.Proto as Pimport Aftok.Billables (SubscriptionId)newtype PaymentRequestId = PaymentRequestId UUID deriving (Show, Eq)makePrisms ''PaymentRequestIdnewtype PaymentId = PaymentId UUID deriving (Show, Eq)makePrisms ''PaymentIddata PaymentRequest' s = PaymentRequest{ _subscription :: s, _paymentRequest :: P.PaymentRequest, _paymentRequestDate :: C.UTCTime}makeLenses ''PaymentRequest'type PaymentRequest = PaymentRequest' SubscriptionIddata Payment' r = Payment{ _request :: r, _payment :: P.Payment, _paymentDate :: C.UTCTime}makeLenses ''Payment'type Payment = Payment' PaymentRequestId
import Aftok.Payments.Typesimport Aftok.Project (ProjectId, depf)import qualified Aftok.TimeLog as TLimport Aftok.Types (satoshi)data BillingConfig = BillingConfig{ _network :: BT.Network, _signingKey :: PrivateKey, _pkiData :: BT.PKIData}makeLenses ''BillingConfigcreatePaymentRequests :: (MonadRandom m, MonadReader BillingConfig m, MonadError Error m, MonadDB m) =>C.UTCTime -- timestamp for payment request creation-> (Subscription' Billable -> m (Maybe Text)) -- generator user memo-> (Subscription' Billable -> m (Maybe URI)) -- generator for payment response URL-> (Subscription' Billable -> m (Maybe ByteString)) -- generator for merchant payload-> UserId -- user responsible for payment-> ProjectId -- project whose worklog is to be paid out to-> m [PaymentRequestId]createPaymentRequests t memogen urigen plgen custId pid = dosubscriptions <- findSubscriptions custId pidcfg <- asklet createPaymentDetails' s = domemo <- memogen suri <- urigen spayload <- plgen screatePaymentDetails t memo uri payload (s ^. billable)
newtype PaymentRequestId = PaymentRequestId UUID deriving (Show, Eq)makePrisms ''PaymentRequestId
createPaymentRequest (sid, s) = dodetails <- createPaymentDetails' sreq <- B.createPaymentRequest (cfg ^. signingKey) (cfg ^. pkiData) detailsliftdb $ CreatePaymentRequest custId (PaymentRequest sid req t)traverse createPaymentRequest subscriptionscreatePaymentDetails :: (MonadRandom m, MonadReader BillingConfig m, MonadDB m) =>C.UTCTime -- timestamp for payment request creation-> Maybe Text -- user memo-> Maybe URI -- payment response URL-> Maybe ByteString -- merchant payload-> Billable-> m P.PaymentDetailscreatePaymentDetails t memo uri payload b = dopayouts <- getProjectPayouts t (b ^. project)outputs <- createPayoutsOutputs t (b ^. amount) payoutslet expiry = (BT.Expiry . fromThyme . (t .+^)) <$> (b ^. requestExpiryPeriod)cfg <- askpure $ B.createPaymentDetails (cfg ^. network) outputs (fromThyme t) expiry memo uri payloadgetProjectPayouts :: (MonadDB m) => C.UTCTime -> ProjectId -> m TL.PayoutsgetProjectPayouts ptime pid = doproject' <-let projectOp = FindProject pidin maybe (raiseSubjectNotFound projectOp) pure =<< liftdb projectOpwidx <- liftdb $ ReadWorkIndex pidpure $ TL.payouts (TL.toDepF $ project' ^. depf) ptime widxcreatePayoutsOutputs :: (MonadDB m) => C.UTCTime -> BT.Satoshi -> TL.Payouts -> m [BT.Output]createPayoutsOutputs t amt p =let payoutFractions :: [(TL.CreditTo, BT.Satoshi)]payoutFractions = (_2 %~ outputAmount amt) <$> assocs (p ^. TL._Payouts)in join <$> traverse (uncurry (createOutputs t)) payoutFractions
newtype PaymentId = PaymentId UUID deriving (Show, Eq)makePrisms ''PaymentId
createOutputs :: (MonadDB m) => C.UTCTime -> TL.CreditTo -> BT.Satoshi -> m [BT.Output]createOutputs _ (TL.CreditToAddress (BtcAddr addr)) amt =pure $ [BT.Output amt (PayPKHash addr)]
data PaymentRequest' s = PaymentRequest{ _subscription :: s, _paymentRequest :: P.PaymentRequest, _paymentRequestDate :: C.UTCTime}makeLenses ''PaymentRequest'
createOutputs _ (TL.CreditToUser uid) amt = doaddrMay <- (>>= view userAddress) <$> findUser uidlet createOutput addr = BT.Output amt (PayPKHash (addr ^. _BtcAddr))pure . maybeToList $ createOutput <$> addrMay
baseSnapConfig :: MonadSnap m => QConfig -> SC.Config m a -> SC.Config m a
readBtcConfig :: CT.Config -> IO BtcConfigreadBtcConfig cfg =let parseNetwork :: String -> B.NetworkparseNetwork "main" = B.MainNetparseNetwork _ = B.TestNetin (BtcConfig . parseNetwork) <$> C.require cfg "network"baseSnapConfig :: QConfig -> SC.Config m a -> SC.Config m a
payouts <- snapEval $ fc (ReadWorkIndex pid)pure $ payouts (toDepF $ project ^. depf) ptime widx-- look up the outstanding
widx <- snapEval $ fc (ReadWorkIndex pid)-- look up outstanding subscriptions the user has for this project-- determine which subscriptions need to be paid-- create a payment request for each subscription
---- Boolean-0.2.3- HUnit-1.3.1.2- MemoTrie-0.6.4- MonadRandom-0.4.2.3- NumInstances-1.4- QuickCheck-2.8.2- RSA-2.2.0- ReadArgs-1.2.3- SHA-1.6.4.2- StateVar-1.1.0.4- adjunctions-4.3- aeson-0.11.2.1- aftok-0.1- ansi-terminal-0.6.2.3- ansi-wl-pprint-0.6.7.3- array-0.5.1.1- asn1-encoding-0.9.4- asn1-parse-0.9.4- asn1-types-0.3.2- async-2.1.1- attoparsec-0.13.1.0- authenticate-oauth-1.5.1.2- base-4.9.0.0- base-orphans-0.5.4- base16-bytestring-0.1.1.6- base64-bytestring-1.0.0.1- basic-prelude-0.6.1- bifunctors-5.4.1- binary-0.8.3.0- bippy-0.1.0.0- blaze-builder-0.4.0.2- blaze-html-0.8.1.3- blaze-markup-0.7.1.1- byteable-0.1.1- bytedump-1.0- bytestring-0.10.8.1- bytestring-builder-0.10.8.1.0- case-insensitive-1.2.0.7- cereal-0.5.4.0- chunked-data-0.3.0- cipher-aes-0.2.11- classy-prelude-1.0.2- clientsession-0.9.1.2- clock-0.7.2- comonad-5- conduit-1.2.8- configurator-0.3.0.0- connection-0.2.6- constraints-0.8- containers-0.5.7.1- contravariant-1.4- cookie-0.4.2.1- cprng-aes-0.6.1- crypto-api-0.13.2- crypto-cipher-types-0.0.9- crypto-pubkey-types-0.4.3- crypto-random-0.0.9- cryptohash-0.11.9- cryptohash-md5-0.11.100.1- cryptohash-sha1-0.11.100.1- cryptonite-0.21- data-binary-ieee754-0.4.4- data-default-0.7.1.1- data-default-class-0.1.2.0- data-default-instances-containers-0.0.1- data-default-instances-dlist-0.0.1- data-default-instances-old-locale-0.0.1- deepseq-1.4.2.0- directory-1.2.6.2- directory-tree-0.12.1- distributive-0.5.1- dlist-0.8.0.2- dlist-instances-0.1.1.1- either-4.4.1.1- entropy-0.3.7- errors-2.1.3- exceptions-0.8.3- fail-4.9.0.0- filepath-1.4.1.0- free-4.12.4- ghc-prim-0.5.0.0- groups-0.4.0.0- hashable-1.2.4.0- haskoin-core-0.4.0- heaps-0.3.3- heist-1.0.1.0- hourglass-0.2.10- http-client-0.4.31.2- http-client-tls-0.2.4.1- http-types-0.9.1- integer-gmp-1.0.0.1- io-streams-1.3.6.0- io-streams-haproxy-1.0.0.1- iso8601-time-0.1.4- kan-extensions-5.0.1- keys-3.11- largeword-1.2.5- lens-4.14- lens-aeson-1.0.0.5- lifted-async-0.9.1- lifted-base-0.2.3.8- map-syntax-0.2.0.1- memory-0.13- mime-mail-0.4.12- mime-types-0.1.0.7- mmorph-1.0.9- monad-control-1.0.1.0- monad-unlift-0.2.0- mono-traversable-1.0.1- mono-traversable-instances-0.1.0.0- mtl-2.2.1- murmur3-1.0.3- mutable-containers-0.3.3- mwc-random-0.13.5.0- network-2.6.3.1- network-info-0.2.0.8- network-uri-2.6.1.0- old-locale-1.0.0.7- optparse-applicative-0.12.1.0- parallel-3.2.1.0- parsec-3.1.11- pbkdf-1.1.1.1- pem-0.2.2- pointed-5- postgresql-libpq-0.9.3.0- postgresql-simple-0.5.2.1- prelude-extras-0.4.0.3- primitive-0.6.1.0- process-1.4.2.0- profunctors-5.2- protobuf-0.2.1.1- psqueues-0.2.2.3- pureMD5-2.1.3- pwstore-fast-2.4.4- random-1.1- readable-0.3.1- reflection-2.1.2- regex-base-0.93.2- regex-posix-0.95.2- resource-pool-0.2.3.2- resourcet-1.1.9- safe-0.3.10- safe-exceptions-0.1.4.0- say-0.1.0.0- scientific-0.3.4.9- secp256k1-0.4.6- securemem-0.1.9- semigroupoids-5.1- semigroups-0.18.2- setenv-0.1.1.3- skein-1.0.9.4- smtp-mail-0.1.4.6- snap-1.0.0.1- snap-core-1.0.1.0- snap-server-1.0.1.1- snaplet-postgresql-simple-1.0.1.0- socks-0.5.5- split-0.2.3.1- stm-2.4.4.1- stm-chans-3.0.0.4- streaming-commons-0.1.16- string-conversions-0.4.0.1- syb-0.6- system-filepath-0.4.13.4- tagged-0.8.5- template-haskell-2.11.0.0- text-1.2.2.1- tf-random-0.5- thyme-0.3.5.5- time-1.6.0.1- time-locale-compat-0.1.1.3- tls-1.3.9- transformers-0.5.2.0- transformers-base-0.4.4- transformers-compat-0.5.1.4- unexceptionalio-0.3.0- unix-2.7.2.0- unix-compat-0.4.3.1- unordered-containers-0.2.7.2- utf8-string-1.0.1.1- uuid-1.3.13- uuid-types-1.0.3- vector-0.11.0.0- vector-algorithms-0.7.0.1- vector-instances-3.3.1- vector-space-0.10.4- vector-th-unbox-0.2.1.6- void-0.7.1- wreq-0.4.1.0- x509-1.6.5- x509-store-1.6.2- x509-system-1.6.4- x509-validation-1.6.5- xmlhtml-0.2.3.5- zlib-0.6.1.2- zlib-bindings-0.1.1.5
- aeson-0.11.2.1- base-orphans-0.5.4- bytestring-builder-0.10.8.1.0- call-stack-0.1.0- haskoin-core-0.4.0- hspec-2.3.2- hspec-core-2.3.2- hspec-discover-2.3.2- hspec-expectations-0.8.2- mmorph-1.0.9- mono-traversable-0.10.2- murmur3-1.0.1- pbkdf-1.1.1.1- postgresql-libpq-0.9.2.0- postgresql-simple-0.5.2.1- resource-pool-catchio-0.2.1.0- secp256k1-0.4.5- snaplet-postgresql-simple-0.6.0.4- unix-compat-0.4.3.1- vector-th-unbox-0.2.1.6resolver: lts-5.3
- heist-1.0.1.0- map-syntax-0.2.0.1- snap-1.0.0.1- snaplet-postgresql-simple-1.0.1.0resolver: lts-7.16