{-# LANGUAGE FlexibleContexts #-}importControl.Monad.IO.ClassimportControl.Monad.ReaderimportControl.Monad.StateimportPreludehiding(print)importqualifiedPreludeasPprint::(MonadIOm,Showa)=>a->m()print=liftIO.P.printnewtypeMyConfig=MyConfigStringderivingShownewtypeMyState=MyStateIntderivingShowgetData::(MonadIOm,MonadReaderMyConfigm)=>mIntgetData=doMyConfigconfig<-askprintconfigreturn$lengthconfiggetMoreData::(MonadReaderMyConfigm,MonadStateMyStatem)=>Int->mIntgetMoreDatax=doMyConfigname<-askMyStateorigState<-getput(MyState$origState+x+lengthname)returnorigStategetEvenMoreData::(MonadIOm,MonadStateMyStatem)=>Int->Int->mIntgetEvenMoreDataxy=doprintxprintyMyStatetotal<-getreturntotalprogram::(MonadIOm,MonadReaderMyConfigm,MonadStateMyStatem)=>m()program=doa<-getDatab<-getMoreDataac<-getMoreDatabd<-getEvenMoreDataacprintdrunProd::(Monadm)=>ReaderTMyConfig(StateTMyStatem)a->marunProd=flipevalStateT(MyState0).fliprunReaderT(MyConfig"production-config")main::IO()main=runProdprogram
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.