[Haskell-beginners] Reader and ReaderT
Grzegorz Balcerek
gbalcerek72 at gmail.com
Fri Oct 16 10:46:27 UTC 2015
Thank you!
This works:
first :: (Monad a) => ReaderT [String] a String
Grzegorz
W dniu 2015-10-15 o 23:55, Alexey Shmalko pisze:
> Hi,
>
> You could generalize first to ReaderT [String] a String, so that you
> could use it as ReaderT [String] IO String. You don't need to change
> the implementation - just change the type.
>
> Hope this helps,
> Alexey
>
> On Fri, Oct 16, 2015 at 12:37 AM, Grzegorz Balcerek
> <gbalcerek72 at gmail.com> wrote:
>> Hi,
>>
>> I have the following program:
>>
>> import Control.Monad.Reader
>>
>> first :: Reader [String] String
>> first = do
>> strings <- ask
>> return $ if (null strings) then "empty" else head strings
>>
>> printFirst :: ReaderT [String] IO ()
>> printFirst = do
>> strings <- ask
>> let theFirstString = runReader first strings
>> liftIO $ putStrLn theFirstString
>>
>> main = runReaderT printFirst ["first","second"]
>>
>> It compiles and works. However, in the printFirst function I am explicitly
>> using ask and I am calling runReader.
>> Can I somehow avoid doing that?
>> The following version of the printFirst function does not compile.
>>
>> printFirst :: ReaderT [String] IO ()
>> printFirst = do
>> theFirstString <- first
>> liftIO $ putStrLn theFirstString
>>
>>
>> Program2.hs:11:21:
>> Couldn't match type `Data.Functor.Identity.Identity' with `IO'
>> Expected type: ReaderT [String] IO String
>> Actual type: Reader [String] String
>> In a stmt of a 'do' block: theFirstString <- first
>> In the expression:
>> do { theFirstString <- first;
>> liftIO $ putStrLn theFirstString }
>>
>> Can I somehow call first without using ask and runReader ?
>>
>> Regards
>> Grzegorz Balcerek
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
More information about the Beginners
mailing list