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. How would you implement Instant and Interval (martin)
2. Re: How would you implement Instant and Interval
(Imants Cekusins)
3. Re: How would you implement Instant and Interval (Daniel Bergey)
4. New chapter in Learning Haskell: fractal structures
(Manuel M T Chakravarty)
5. lists strange behaviour ([email protected])
6. Re: lists strange behaviour (Kim-Ee Yeoh)
----------------------------------------------------------------------
Message: 1
Date: Tue, 27 Oct 2015 18:53:59 +0100
From: martin <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: [Haskell-beginners] How would you implement Instant and
Interval
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8
Hello all
If I define an Instant as a point in Time and an Interval as the difference
between two Instants, and I also want to use
(+) and (-), how can I do this.
My initial thought making them instances of the Num class, but that does not
work. (-) is okay on Intervals, but on
Instant it returns a different type (Interval).
Is it possible at all to define a typeclass with (-) :: Instant -> Instant ->
Interval without using language extensions?
------------------------------
Message: 2
Date: Tue, 27 Oct 2015 20:21:57 +0100
From: Imants Cekusins <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] How would you implement Instant and
Interval
Message-ID:
<CAP1qinZDSZ-04dawVN=ryfdnye9rydvrczko+zmmvprrba0...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Would this package help:
http://hackage.haskell.org/package/time-interval
?
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20151027/7c58e518/attachment-0001.html>
------------------------------
Message: 3
Date: Tue, 27 Oct 2015 16:40:29 -0400
From: Daniel Bergey <[email protected]>
To: martin <[email protected]>, The Haskell-Beginners Mailing
List - Discussion of primarily beginner-level topics related to
Haskell <[email protected]>
Subject: Re: [Haskell-beginners] How would you implement Instant and
Interval
Message-ID:
<87y4eoniyq.fsf@chladni.i-did-not-set--mail-host-address--so-tickle-me>
Content-Type: text/plain
On 2015-10-27 at 13:53, martin <[email protected]> wrote:
> Hello all
>
> If I define an Instant as a point in Time and an Interval as the difference
> between two Instants, and I also want to use
> (+) and (-), how can I do this.
>
> My initial thought making them instances of the Num class, but that does not
> work. (-) is okay on Intervals, but on
> Instant it returns a different type (Interval).
>
> Is it possible at all to define a typeclass with (-) :: Instant -> Instant ->
> Interval without using language extensions?
I think you are asking for the same type class function to have
the types
`Instant -> Instant -> Interval`
and
`Interval -> Interval -> Interval`
for two different instances. I don't believe this is possible without
language extensions. Below is an example of doing it with
TypeFamilies. If I actually wanted this, I'd probably use the Affine
class from linear[1] or vector-space[2] instead of the Sub class I
define here. At any event, I don't think I'd want to give up on using -
in it's normal meaning of Num, in order to use it for Time and Interval.
newtype Time = Time Double deriving Show
newtype Interval = Interval Double deriving Show
class Sub a where
type Diff a
(.-.) :: a -> a -> Diff a
instance Sub Time where
type Diff Time = Interval
(Time a) .-. (Time b) = Interval (a - b)
instance Sub Interval where
type Diff Interval = Interval
(Interval a) .-. (Interval b) = Interval (a - b)
Footnotes:
[1] http://hackage.haskell.org/package/linear-1.20.2/docs/Linear-Affine.html
[2]
http://hackage.haskell.org/package/vector-space-0.10.2/docs/Data-AffineSpace.html
------------------------------
Message: 4
Date: Wed, 28 Oct 2015 12:54:17 +1100
From: Manuel M T Chakravarty <[email protected]>
To: [email protected]
Subject: [Haskell-beginners] New chapter in Learning Haskell: fractal
structures
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8
Our tutorial ?Learning Haskell? just gained a new fun chapter on visualising
recursion with fractal structures:
http://blog.haskellformac.com/blog/fractals-recursion-in-pictures
Happy Coding!
Manuel
PS: This is going to be a good one for anybody who wants to get their kids
interested in programming, too.
------------------------------
Message: 5
Date: Wed, 28 Oct 2015 11:52:53 +0100
From: [email protected]
To: <[email protected]>
Subject: [Haskell-beginners] lists strange behaviour
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8; format=flowed
Hello,
if I write down: [(x,y)|x<-[1..5],y<-[1..5]]
I obtain as expected:
[(1,1),(1,2),(1,3),(1,4),(1,5),(2,1),(2,2),(2,3),(2,4),(2,5),(3,1),(3,2),(3,3),(3,4),(3,5),(4,1),(4,2),(4,3),(4,4),(4,5),(5,1),(5,2),(5,3),(5,4),(5,5)]
If I write down: [(x,y)|x<-[1..5],y<-[1..5],x==5]
I obtain as expected:
[(1,1),(1,2),(1,3),(1,4),(1,5)]
but if I write: [(x,y)|x<-[1..5],y<-[1..5],x<-[1]]
I obtain:
[(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5)]
Why?????
Thank you in advance.
Regards,
Maurizio
Connetti gratis il mondo con la nuova indoona: hai la chat, le
chiamate, le video chiamate e persino le chiamate di gruppo.
E chiami gratis anche i numeri fissi e mobili nel mondo!
Scarica subito l?app Vai su https://www.indoona.com/
------------------------------
Message: 6
Date: Wed, 28 Oct 2015 18:01:18 +0700
From: Kim-Ee Yeoh <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] lists strange behaviour
Message-ID:
<CAPY+ZdT2h7RJTgOTV=-z6782a=75nnt2vpk+qbdtdvbjzvf...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
On Wed, Oct 28, 2015 at 5:52 PM, <[email protected]> wrote:
> but if I write: [(x,y)|x<-[1..5],y<-[1..5],x<-[1]]
> I obtain:
>
> [(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5)]
>
Others will chime in with a full answer soon.
Meanwhile, consider that
[(x,y)|x<-[1..5],y<-[1..5],x<-[1]]
(which is quite weird as a set-theoretic expression)
is Haskell-equivalent to
[(x,y)|_<-[1..5],y<-[1..5],x<-[1]]
Now consider
[(x,y)|y<-[1..5],x<-[1]]
which is [(1,1),(1,2),(1,3),(1,4),(1,5)] as you expect.
Separately, consider
[ a | _ <- [1..5], f a ]
where you can experiment with different values of f and a.
Putting together the pieces will give you an answer to your query.
-- Kim-Ee
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://mail.haskell.org/pipermail/beginners/attachments/20151028/059f3c42/attachment-0001.html>
------------------------------
Subject: Digest Footer
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
------------------------------
End of Beginners Digest, Vol 88, Issue 26
*****************************************