Send Beginners mailing list submissions to
[email protected]
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
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: The (x:xs) in function parameter is a tuple? (Rein Henrichs)
2. Re: general observation about programming (Mike Pentney)
3. Re: Folders and sub-folders (Mike Houghton)
----------------------------------------------------------------------
Message: 1
Date: Thu, 25 Feb 2016 22:43:53 +0000
From: Rein Henrichs <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] The (x:xs) in function parameter is a
tuple?
Message-ID:
<cajp6g8yjdjdcazbrihjggbgs9gua85spdlg4akw3xx7plar...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Nan, generally speaking (e.g., in maths) tuples can contain any number of
elements. Haskell specifically disallows one-tuples because of the
ambiguity in parsing them. Instead, (expr) is just evaluated as expr. On
the other hand, it does allow (), which is a zero-tuple. Haskell's
compilers also impose an upper bound on the practical size of a tuple (for
modern GHC, that's 61, as Max mentioned) but that isn't a restriction of
the Haskell language itself. If you want, you can consider Identity a to be
a one-tuple, but it obviously doesn't use tuple syntax.
As a side note, a 1-tuple is occasionally called a monad in other
disciplines, while a monad is actually defined as a triple (a three-tuple)
in maths. None of that is relevant to Haskell though.
On Thu, Feb 25, 2016 at 7:14 AM Max Voit <[email protected]>
wrote:
> On Thu, 25 Feb 2016 07:49:56 +0800
> Nan Xiao <[email protected]> wrote:
>
> > Rein referred "A tuple can have any number of elements", while Graham
> > referred "There's no "one-ple", or 1-tuple, in Haskell.". So which one
> > is right? The tuple at least contains 2 elements?
>
> There is no one-tuple; however, there's a zero-tuple. Also no arbitrary
> number of tuple elements allowed, due to definition (we're at 61 for
> some reason). Refer to
>
> http://hackage.haskell.org/package/ghc-prim-0.4.0.0/docs/GHC-Tuple.html
>
> best, Max
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20160225/c36047d4/attachment-0001.html>
------------------------------
Message: 2
Date: Fri, 26 Feb 2016 09:55:22 +0000
From: Mike Pentney <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] general observation about programming
Message-ID: <[email protected]>
Content-Type: text/plain; charset=windows-1252; format=flowed
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 <[email protected]
> <mailto:[email protected]>> 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
>> [email protected] <mailto:[email protected]>
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
> _______________________________________________
> Beginners mailing list
> [email protected] <mailto:[email protected]>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
>
>
> --
> Jeffrey Benjamin Brown
>
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
------------------------------
Message: 3
Date: Fri, 26 Feb 2016 10:42:07 +0000
From: Mike Houghton <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Folders and sub-folders
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
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 <[email protected]> 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
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 92, Issue 33
*****************************************