Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. How do I map a String and a IO String? (Jona Ekenberg) 2. Re: How do I map a String and a IO String? (Francesco Ariis) 3. Re: How do I map a String and a IO String? (Jona Ekenberg) 4. order of things in a file.hs? (Silent Leaf) 5. Re: order of things in a file.hs? (Norbert Melzer) 6. Re: order of things in a file.hs? (Jona Ekenberg) ---------------------------------------------------------------------- Message: 1 Date: Thu, 29 Jun 2017 14:33:22 +0200 From: Jona Ekenberg <saik...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <Beginners@haskell.org> Subject: [Haskell-beginners] How do I map a String and a IO String? Message-ID: <calveeuchyyj2rsocn54ebgk00pudsp3ttmsalzx69bm2f5z...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" I want to replace lines with the content of a file if the line is a filename > {-# LANGUAGE LambdaCase #-} > test = do > putStrLn $ concatMap (\l -> l ++ "\n") > $ map (\case l > | (isPrefixOf "./" l) -> readFile l > | otherwise -> l) But since l is a String and readFile gives an IO String this doesn't work. How should I get around this? Kind regards, Jona -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170629/69762fa5/attachment-0001.html> ------------------------------ Message: 2 Date: Thu, 29 Jun 2017 15:16:02 +0200 From: Francesco Ariis <fa...@ariis.it> To: beginners@haskell.org Subject: Re: [Haskell-beginners] How do I map a String and a IO String? Message-ID: <20170629131602.rwkbt4dypkefx...@x60s.casa> Content-Type: text/plain; charset=utf-8 On Thu, Jun 29, 2017 at 02:33:22PM +0200, Jona Ekenberg wrote: > I want to replace lines with the content of a file if the line is a filename Hello Jonas, you want to user `return`: λ> :t return return :: Monad m => a -> m a which lifts a simple value inside a monad (in this case, a -> IO a), like this: lineOrIO :: String -> IO String lineOrIO cs | (isPrefixOf "./" cs) = readFile cs | otherwise = return cs If this is not a school assignment, consider replacing `isPrefixOf "./"` with something from `System.Directory`. Does this help? ------------------------------ Message: 3 Date: Thu, 29 Jun 2017 16:15:16 +0200 From: Jona Ekenberg <saik...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] How do I map a String and a IO String? Message-ID: <calveeudu03kg2dvjsz7exzmtfi-rnc5uycv_znhnfnh66gg...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" 2017-06-29 15:16 GMT+02:00 Francesco Ariis <fa...@ariis.it>: > On Thu, Jun 29, 2017 at 02:33:22PM +0200, Jona Ekenberg wrote: > > I want to replace lines with the content of a file if the line is a > filename > > Hello Jonas, you want to user `return`: > > λ> :t return > return :: Monad m => a -> m a > > which lifts a simple value inside a monad (in this case, a -> IO a), like > this: > > lineOrIO :: String -> IO String > lineOrIO cs | (isPrefixOf "./" cs) = readFile cs > | otherwise = return cs > > If this is not a school assignment, consider replacing `isPrefixOf "./"` > with something from `System.Directory`. > > Does this help? Thank you for your help Francesco! I tried writing it like this: > lineOrIo :: String -> IO String > lineOrIo cs | (isPrefixOf "./" cs) = readFile cs > | otherwise = return cs > > printLines path = do > file <- readFile path > lines <- map lineOrIo (lines file) > print lines But when evaluating I get this error: PrintComments.lhs:20:14-38: error: … • Couldn't match type ‘[]’ with ‘IO’ Expected type: IO (IO String) Actual type: [IO String] • In a stmt of a 'do' block: lines <- map lineOrIo (lines file) In the expression: do { file <- readFile path; lines <- map lineOrIo (lines file); print lines } In an equation for ‘printLines’: printLines path = do { file <- readFile path; lines <- map lineOrIo (lines file); print lines } Compilation failed. Sadly I am not yet very used to the error messages, so I don't understand what ghci is telling me. As far as I can tell (lines file) should give me an array of strings, which I turn into an array of IO String. Could that be the error? It shouldn't be [IO String] but instead IO [String]? How do I turn the former into the latter? Kind regards, Jona PS. It is not a school assignment, so I'll make sure to check out System.Directory. > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170629/19031ed5/attachment-0001.html> ------------------------------ Message: 4 Date: Thu, 29 Jun 2017 16:22:34 +0200 From: Silent Leaf <silent.le...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: [Haskell-beginners] order of things in a file.hs? Message-ID: <CAGFccjOHsJQKp7OcjKDj=4bn9uoybncjjyhgxze0pge+qtw...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" hi, what is your personal practice of ordering data/functions/main/hidden functions, etc in a haskell file? like all trivial things they are very hard to decide upon, given that either order of helpers then main function / value, or the other way round, has tempting pros and cons. thanks in advance for your opinion! -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170629/69cec4a5/attachment-0001.html> ------------------------------ Message: 5 Date: Thu, 29 Jun 2017 14:31:30 +0000 From: Norbert Melzer <timmel...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] order of things in a file.hs? Message-ID: <ca+bcvsv7mhrd18nzu6h2+-jrsji3aosrtnmyhhn0b5qamqx...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" In all languages that support arbitrary ordering I try to keep exported stuff to the top and private stuff somewhere below. Silent Leaf <silent.le...@gmail.com> schrieb am Do., 29. Juni 2017, 16:23: > hi, > > what is your personal practice of ordering data/functions/main/hidden > functions, etc in a haskell file? like all trivial things they are very > hard to decide upon, given that either order of helpers then main function > / value, or the other way round, has tempting pros and cons. > > thanks in advance for your opinion! > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170629/f6347c45/attachment-0001.html> ------------------------------ Message: 6 Date: Thu, 29 Jun 2017 16:47:32 +0200 From: Jona Ekenberg <saik...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] order of things in a file.hs? Message-ID: <CALvEEUem_s84=6A+ob=bkumcaqohc7vo9erjw3zw8xf_zbg...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" 2017-06-29 16:22 GMT+02:00 Silent Leaf <silent.le...@gmail.com>: > hi, > > what is your personal practice of ordering data/functions/main/hidden > functions, etc in a haskell file? like all trivial things they are very > hard to decide upon, given that either order of helpers then main function > / value, or the other way round, has tempting pros and cons. > > thanks in advance for your opinion! > > I've started trying to write my program in a way that makes sense as when reading it from top to bottom, like a story. So if you write a function that calls upon other functions, those functions can come immediately afterwards, if they're relevant, or if their names are enough, they could be put in a different file altogether. Some functions are bigger, like stories of their own. In those cases I generally put them in a new file, like a new chapter. Those should be coherent in themselves, and not depend on the first file in order to make sense. If chapters are dependent on each other in that way, then maybe they have to be rewritten. This is a really course generalization, and I've actually not written code like this for long. But I do think writing code in a way that makes sense as a human reader is important, and humans tend to enjoy reading stories. It doesn't really have to be some sort of magical journey (though it very well could be!), but I think there should be some sort of red thread that goes from one place in the code to the next, without extreme leaps that are hard to understand. > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170629/eb51e0f2/attachment.html> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 108, Issue 23 ******************************************