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. Re: general observation about programming (Rein Henrichs) 2. Re: Folders and sub-folders (Mike Houghton) ---------------------------------------------------------------------- Message: 1 Date: Fri, 26 Feb 2016 17:41:40 +0000 From: Rein Henrichs <rein.henri...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org>, dbro...@runforyourlife.org Subject: Re: [Haskell-beginners] general observation about programming Message-ID: <cajp6g8yoxf_raw132pzw_9+pxqdp1gmw00dcjfam9ixhrl_...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Pointfree is good for reasoning about *composition*. It can often be more readable than pointful code when the focus of the function is on composition of other functions. For example, take this function from Bird's *Pearls of Functional Algorithm Design*: boxes = map ungroup . ungroup . map cols . group . map group Compare the pointful version: boxes matrix = map ungroup (ungroup (map cols (group (map group matrix)))) Readibility is subjective, but I think many people will agree that the pointfree version is easier to read. On Fri, Feb 26, 2016 at 8:19 AM MJ Williams <matthewjwilliams...@gmail.com> wrote: > As I see it, Haskell and pure functional languages aren't > `necessarily' about readability so much as expressing thought in > mathematical terms. The readability comes with the consistency and > transparency of well-formed mathematical notation. > by the way, that's transparency in laymen's sense and not referential > transparency. > Matthew > > > On 26/02/2016, Dudley Brooks <dbro...@runforyourlife.org> wrote: > > One problem is that, while the symbolic operators do seem to have names > > (specified in the standards?) which are often sufficiently explanatory, > > you can find many tutorials which never even mention those names. > > > > On 2/26/16 1:55 AM, Mike Pentney wrote: > > > >> As a newbie, something I dislike about Haskell is the use of infix > >> operators like <||> which are unpronouncable and therefore (if you > >> don't happen to know the notation the symbol is based on) are more or > >> less meaningless. > >> > >> And Haskellers often seem to prefer 1 and 2 character variable names, > >> which again convey little or no information. > >> > >> And don't get me started on point-free code...! > >> > >> N.B. I am not trying to start a flame war, these are just comments > >> from my experience of trying to get beyond text-book examples and > >> start using Haskell libraries and trying to learn from open source > >> code. In general I find idiomatic Haskell hard to understand, and for > >> me this is a barrier to using Haskell for real projects. Maybe someday > >> I'll have learnt enough to get past this problem, but as the language > >> and libraries seem to evolve quickly, I have my doubts... > >> > >> > >> On 25/02/16 19:19, Jeffrey Brown wrote: > >>> Something I like about functional programming is how it interfaces > >>> with natural language. > >>> Haskell, somehow to a greater extent than other languages, encourages > >>> me to divide functions > >>> into one or two-liners. Each has a type signature that means > >>> something in English. Further, each > >>> gives you the opportunity to choose a good name for the function and > >>> its arguments. After doing > >>> those things, the function is much easier to write, and much easier > >>> to read -- so much so that > >>> often you don't have to read the function body at all, just the type > >>> signature, function name > >>> and argument names. > >>> > >>> On Thu, Feb 25, 2016 at 8:17 AM, Dudley Brooks > >>> <dbro...@runforyourlife.org > >>> <mailto:dbro...@runforyourlife.org>> wrote: > >>> > >>> Ages and ages ago I saw this advice about programming: > >>> > >>> Q: "What's the best language for a programmer to know?" > >>> > >>> A: "English" (or whatever your native language is) > >>> > >>> -- Dudley > >>> > >>> > >>> On 2/24/16 4:03 PM, Dennis Raddle wrote: > >>> > >>>> This is more about programming in general than Haskell, although > >>>> Haskellers probably know > >>>> it well. > >>>> > >>>> I don't claim to have expert knowledge on this, but I'm > >>>> gradually getting better at it. > >>>> > >>>> When I set out to write a program, or refactor a program, or > >>>> modify a program, it helps to > >>>> set out my thinking in a clear way. And how I make it clear is > >>>> to document my thoughts. > >>>> > >>>> An outline is one good way to organize thoughts and is probably > >>>> my main tool. But good > >>>> English prose is also helpful. > >>>> > >>>> The key factor is "editing." In what sense do I mean that? Good > >>>> writers do it, and the > >>>> Haskell documentation does it. I mean (1) brevity and (2) good > >>>> flow. To achieve brevity, > >>>> you must think about the essence of each statement and trim away > >>>> the unnecessary stuff. > >>>> Good flow refers to how the document builds up and modifies your > >>>> concepts as you read it. > >>>> A document can actually mirror an effective learning process, or > >>>> influence and change your > >>>> process. > >>>> > >>>> I work with my documentation, making several editing passes. By > >>>> the time I'm done, I am in > >>>> a great position to write a concise and flexible program. > >>>> > >>>> It's interesting that not only is Haskell a concise language, > >>>> but the Haskell library > >>>> documentation is concise. Contrast that with the Python > >>>> documentation which often wanders > >>>> about into areas that are irrelevant--it could easily be cut > >>>> into one third its present size. > >>>> > >>>> Mike > >>>> > >>>> > >>>> > >>>> > >>>> _______________________________________________ > >>>> Beginners mailing list > >>>> Beginners@haskell.org <mailto:Beginners@haskell.org> > >>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > >>> > >>> > >>> _______________________________________________ > >>> Beginners mailing list > >>> Beginners@haskell.org <mailto:Beginners@haskell.org> > >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > >>> > >>> > >>> > >>> > >>> -- > >>> Jeffrey Benjamin Brown > >>> > >>> > >>> _______________________________________________ > >>> Beginners mailing list > >>> Beginners@haskell.org > >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > >>> > >> _______________________________________________ > >> Beginners mailing list > >> Beginners@haskell.org > >> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > > _______________________________________________ > > Beginners mailing list > > Beginners@haskell.org > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > _______________________________________________ > 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/20160226/f40c5f1f/attachment-0001.html> ------------------------------ Message: 2 Date: Fri, 26 Feb 2016 18:13:33 +0000 From: Mike Houghton <mike_k_hough...@yahoo.co.uk> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Folders and sub-folders Message-ID: <6d1f3b6c-a168-4c94-bc17-1e1240b31...@yahoo.co.uk> Content-Type: text/plain; charset="us-ascii" Cool, thanks. > On 26 Feb 2016, at 13:01, Sylvain Henry <hsy...@gmail.com> wrote: > > Your "isOk" function will filter out hidden directories on Unix (which may be > what you want?). > > Otherwise: isOk = (`notElem` [".",".."]) > > Also "\x -> folders x" = "folders" > > 2016-02-26 11:42 GMT+01:00 Mike Houghton <mike_k_hough...@yahoo.co.uk > <mailto:mike_k_hough...@yahoo.co.uk>>: > Thanks. > > > I sweated it bit more and got > > > > isOk FilePath -> Bool > isOk = not . isPrefixOf "." > > folders :: FilePath -> IO [FilePath] > folders fp = do > all <- getDirectoryContents fp > z' <- filterM doesDirectoryExist $ map (fp </>) (filter isOk all) > x' <- mapM (\x -> folders x) z' > return $ z' ++ (concat x') :: > > which seems to work. > > > > On 25 Feb 2016, at 19:07, Imants Cekusins <ima...@gmail.com > > <mailto:ima...@gmail.com>> wrote: > > > > Hello Mike, > > > > below code find all files recursively from a starting point. It works. > > > > You'd need to tweak it to find folders instead. > > > > > > import System.Directory > > import Data.List > > > > > > findAllFiles::FilePath -> IO [FilePath] > > findAllFiles base0 = gd1 base0 > >>> = \list1 -> concatMap' recurse3 list1 > > where gd1 d1 = filter f2 <$> (getDirectoryContents d1) > > f2 "." = False > > f2 ".." = False > > f2 _ = True > > recurse3 md3 = doesDirectoryExist md3full > >>> = \isDir3 -> > > if isDir3 then findAllFiles md3full > > else pure [md3full] > > where md3full = base0 ++ "/" ++ md3 > > > > > > > > concatMap':: (a -> IO [b]) -> [a] -> IO [b] > > concatMap' m0 list0 = sequence (m0 <$> list0) > >>> = \list2 -> pure $ concat list2 > > _______________________________________________ > > Beginners mailing list > > Beginners@haskell.org <mailto:Beginners@haskell.org> > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners> > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org <mailto:Beginners@haskell.org> > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners> > > _______________________________________________ > 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/20160226/6011234f/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 92, Issue 35 *****************************************