Send Beginners mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://www.haskell.org/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:  Pattern matching over functions (Daniel Fischer)
   2.  Matrix / Matrix Addition (Paul Monday)
   3. Re:  Matrix / Matrix Addition (Daniel Fischer)
   4. Re:  Matrix / Matrix Addition (Felipe Almeida Lessa)
   5. Re:  Matrix / Matrix Addition (Paul Monday)
   6.  Installing regex-pcre (MJ Williams)
   7. Re:  Installing regex-pcre (David McBride)
   8. Re:  Pattern matching over functions (Giacomo Tesio)


----------------------------------------------------------------------

Message: 1
Date: Thu, 8 Dec 2011 13:53:19 +0100
From: Daniel Fischer <[email protected]>
Subject: Re: [Haskell-beginners] Pattern matching over functions
To: [email protected]
Message-ID: <[email protected]>
Content-Type: Text/Plain;  charset="iso-8859-1"

On Thursday 08 December 2011, 07:14:39, Brent Yorgey wrote:
> I, for one, am not
> willing to give up these beautiful and powerful reasoning tools just
> for a little gain in expressivity.
> 
> -Brent

Seconded,

Daniel



------------------------------

Message: 2
Date: Thu, 8 Dec 2011 13:55:46 -0700
From: Paul Monday <[email protected]>
Subject: [Haskell-beginners] Matrix / Matrix Addition
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=windows-1252

I'm working on simple matrix / matrix addition for a short project.  Doing this 
with lists (not worrying about matrix sizes and such) is relatively easy and 
makes quite a bit of sense to me:

basically:

madd :: Num a => [[a]] -> [[a]] -> [[a]]

I could read this as:
- with a as a Numeric type, take two lists of lists of Numerics  and return a 
list of lists of Numerics

And then to do the job simple
madd m n = zipWith (zipWith (+)) m n

And I can read that easily enough:
-- madd has two inputs, m and n and it will do the function "zipWith (+)" 
across its inputs of the inner lists from m and n (the rows, basically)

Ok, so
madd [[1,2,3], [4,5,6], [7,8,9]] [[10,11,12], [13,14,5], [16,17,18]]

yields [[11,13,15],[17,19,11],[23,25,27]]

Cool

I can get a little nicer (possibly) if I use a Matrix type:

data Matrix a = Matrix [[a]]
    deriving (Show, Eq)

madd :: Num a => [[a]] -> [[a]] -> [[a]]
madd m n = zipWith (zipWith (+)) m n

madd2 :: (Num a) => Matrix a -> Matrix a -> Matrix a
madd2 (Matrix m) (Matrix n) = Matrix $ zipWith (zipWith (+)) m n

The only real change in terms of the code is in the madd2 definition where I 
have to construct a Matrix to return from the results of the zipWiths ? and 
some better type safety of course.

*Main> madd2 (Matrix [[1,2,3], [4,5,6], [7,8,9]]) (Matrix [[10,11,12], 
[13,14,5], [16,17,18]])
Matrix [[11,13,15],[17,19,11],[23,25,27]]

Cool'

Now, I really want to use Unboxed Vectors.  As I look around the web and poke 
around through various resources, I believe that I need the rows to be unboxed 
but the columns can be boxed ? the actual operations on the rows will give me 
the speed up I desire.

So, here it is:

import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U

data UMatrix a = UMatrix (V.Vector (U.Vector a))
    deriving (Show, Eq)
 
madd3 :: (U.Unbox a, Num a) => UMatrix a -> UMatrix a -> UMatrix a
madd3 (UMatrix m) (UMatrix n) = UMatrix $ V.zipWith (U.zipWith (+)) m n

And it works ? (really, when I started writing this note, I was completely lost 
? welcome to the power of sitting and walking through Haskell)

madd3 (UMatrix (Data.Vector.fromList [Data.Vector.Unboxed.fromList [1,2,3], 
Data.Vector.Unboxed.fromList [4,5,6], Data.Vector.Unboxed.fromList [7,8,9]])) 
(UMatrix (Data.Vector.fromList [Data.Vector.Unboxed.fromList [10,11,12], 
Data.Vector.Unboxed.fromList [13,14,5], Data.Vector.Unboxed.fromList 
[16,17,18]]))

I have ONE thing that I can't really explain ?

Why does the declaration of madd3 REQUIRE the use of U.Unbox a as a data type?
madd3 :: (U.Unbox a, Num a) => UMatrix a -> UMatrix a -> UMatrix a

I would have thought that my declaration of UMatrix would have done this?

Cheers.

Paul Monday
Parallel Scientific, LLC.
[email protected]







------------------------------

Message: 3
Date: Thu, 8 Dec 2011 22:13:20 +0100
From: Daniel Fischer <[email protected]>
Subject: Re: [Haskell-beginners] Matrix / Matrix Addition
To: [email protected]
Message-ID: <[email protected]>
Content-Type: Text/Plain;  charset="windows-1252"

On Thursday 08 December 2011, 21:55:46, Paul Monday wrote:
> data UMatrix a = UMatrix (V.Vector (U.Vector a))
>     deriving (Show, Eq)
>  
> madd3 :: (U.Unbox a, Num a) => UMatrix a -> UMatrix a -> UMatrix a
> madd3 (UMatrix m) (UMatrix n) = UMatrix $ V.zipWith (U.zipWith (+)) m n
> 
> And it works ? (really, when I started writing this note, I was
> completely lost ? welcome to the power of sitting and walking through
> Haskell)
> 
> madd3 (UMatrix (Data.Vector.fromList [Data.Vector.Unboxed.fromList
> [1,2,3], Data.Vector.Unboxed.fromList [4,5,6],
> Data.Vector.Unboxed.fromList [7,8,9]])) (UMatrix (Data.Vector.fromList
> [Data.Vector.Unboxed.fromList [10,11,12], Data.Vector.Unboxed.fromList
> [13,14,5], Data.Vector.Unboxed.fromList [16,17,18]]))
> 
> I have ONE thing that I can't really explain ?
> 
> Why does the declaration of madd3 REQUIRE the use of U.Unbox a as a data
> type? madd3 :: (U.Unbox a, Num a) => UMatrix a -> UMatrix a -> UMatrix
> a
> 
> I would have thought that my declaration of UMatrix would have done
> this?

No, the data declaration doesn't provide any such context, hence you have 
to specify it at the use site (I don't think for types which aren't 
instances of Unbox there are any values other than _|_, though).

You can make the Unbox constraint available from the data declaration if 
you use GADTs,

{-# LANGUAGE GADTs #-}

data UMatrix e where
    UMatrix :: U.Unbox a => V.Vector (U.Vector a) -> UMatrix a

Then pattern-matching on a UMatrix makes the Unbox dictionary of a 
available.



------------------------------

Message: 4
Date: Thu, 8 Dec 2011 19:24:13 -0200
From: Felipe Almeida Lessa <[email protected]>
Subject: Re: [Haskell-beginners] Matrix / Matrix Addition
To: Paul Monday <[email protected]>
Cc: [email protected]
Message-ID:
        <CANd=OGHizA=dye2g_tdd-2kk0df9hteo+bffd_nz659m4m+...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8

On Thu, Dec 8, 2011 at 6:55 PM, Paul Monday <[email protected]> wrote:
> data UMatrix a = UMatrix (V.Vector (U.Vector a))
> ? ?deriving (Show, Eq)

Note that you may also use something like

    data UMatrix a = UMatrix !Int !(U.Vector a)

where the Int is the number of columns.

Cheers,

-- 
Felipe.



------------------------------

Message: 5
Date: Thu, 8 Dec 2011 15:04:43 -0700
From: Paul Monday <[email protected]>
Subject: Re: [Haskell-beginners] Matrix / Matrix Addition
To: Daniel Fischer <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="windows-1252"

Perfect ? Thanks Daniel!

Paul Monday
Parallel Scientific, LLC.
[email protected]




On Dec 8, 2011, at 2:13 PM, Daniel Fischer wrote:

> On Thursday 08 December 2011, 21:55:46, Paul Monday wrote:
>> data UMatrix a = UMatrix (V.Vector (U.Vector a))
>>    deriving (Show, Eq)
>> 
>> madd3 :: (U.Unbox a, Num a) => UMatrix a -> UMatrix a -> UMatrix a
>> madd3 (UMatrix m) (UMatrix n) = UMatrix $ V.zipWith (U.zipWith (+)) m n
>> 
>> And it works ? (really, when I started writing this note, I was
>> completely lost ? welcome to the power of sitting and walking through
>> Haskell)
>> 
>> madd3 (UMatrix (Data.Vector.fromList [Data.Vector.Unboxed.fromList
>> [1,2,3], Data.Vector.Unboxed.fromList [4,5,6],
>> Data.Vector.Unboxed.fromList [7,8,9]])) (UMatrix (Data.Vector.fromList
>> [Data.Vector.Unboxed.fromList [10,11,12], Data.Vector.Unboxed.fromList
>> [13,14,5], Data.Vector.Unboxed.fromList [16,17,18]]))
>> 
>> I have ONE thing that I can't really explain ?
>> 
>> Why does the declaration of madd3 REQUIRE the use of U.Unbox a as a data
>> type? madd3 :: (U.Unbox a, Num a) => UMatrix a -> UMatrix a -> UMatrix
>> a
>> 
>> I would have thought that my declaration of UMatrix would have done
>> this?
> 
> No, the data declaration doesn't provide any such context, hence you have 
> to specify it at the use site (I don't think for types which aren't 
> instances of Unbox there are any values other than _|_, though).
> 
> You can make the Unbox constraint available from the data declaration if 
> you use GADTs,
> 
> {-# LANGUAGE GADTs #-}
> 
> data UMatrix e where
>    UMatrix :: U.Unbox a => V.Vector (U.Vector a) -> UMatrix a
> 
> Then pattern-matching on a UMatrix makes the Unbox dictionary of a 
> available.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20111208/0d7550ff/attachment-0001.htm>

------------------------------

Message: 6
Date: Thu, 08 Dec 2011 23:09:15 +0000
From: MJ Williams <[email protected]>
Subject: [Haskell-beginners] Installing regex-pcre
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="us-ascii"; format=flowed

Dear all,
I'm trying to install regex-pcre on my XP Pro machine.  I have the 
latest version of GHC.  Do any of you recognise and understand the 
following error message?

install regex-pcre
Resolving dependencies...
Configuring regex-pcre-0.94.2...
cabal: Missing dependency on a foreign library:
* Missing C library: pcre
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
cabal: Error: some packages failed to install:
regex-pcre-0.94.2 failed during the configure step. The exception was:
ExitFailure 1


Apologies if the query is a little offtopic.
Regards
Matthew




------------------------------

Message: 7
Date: Thu, 8 Dec 2011 18:25:58 -0500
From: David McBride <[email protected]>
Subject: Re: [Haskell-beginners] Installing regex-pcre
To: MJ Williams <[email protected]>
Cc: [email protected]
Message-ID:
        <can+tr43fqyma92osxrf0rgznueqsws5mavtijf+p190g7o2...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

That package requires the C library 'libpcre'.  It is extremely common
on unix systems, but I don't know if it exists in windows.  You'll
have to do some research on that.

On Thu, Dec 8, 2011 at 6:09 PM, MJ Williams
<[email protected]> wrote:
> Dear all,
> I'm trying to install regex-pcre on my XP Pro machine. ?I have the latest
> version of GHC. ?Do any of you recognise and understand the following error
> message?
>
> install regex-pcre
> Resolving dependencies...
> Configuring regex-pcre-0.94.2...
> cabal: Missing dependency on a foreign library:
> * Missing C library: pcre
> This problem can usually be solved by installing the system package that
> provides this library (you may need the "-dev" version). If the library is
> already installed but in a non-standard location then you can use the flags
> --extra-include-dirs= and --extra-lib-dirs= to specify where it is.
> cabal: Error: some packages failed to install:
> regex-pcre-0.94.2 failed during the configure step. The exception was:
> ExitFailure 1
>
>
> Apologies if the query is a little offtopic.
> Regards
> Matthew
>
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners



------------------------------

Message: 8
Date: Fri, 9 Dec 2011 07:42:04 +0100
From: Giacomo Tesio <[email protected]>
Subject: Re: [Haskell-beginners] Pattern matching over functions
To: Daniel Fischer <[email protected]>
Cc: [email protected]
Message-ID:
        <cahl7pseogp68racfxkk6-_pbm1-s7+9xfcv8j_drddkhktd...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

I agree.

I think I got it, without the ability to correctly match equivalent
morphisms, morphisms can't be treated as objects.

Probably such ability would require a very powerful runtime, but I don't
think that it would be just matter of expressivity (and you would not loose
referential transparency as (+3) would be matched with (\x -> 5 + x - 2).


Giacomo

On Thu, Dec 8, 2011 at 1:53 PM, Daniel Fischer <
[email protected]> wrote:

> On Thursday 08 December 2011, 07:14:39, Brent Yorgey wrote:
> > I, for one, am not
> > willing to give up these beautiful and powerful reasoning tools just
> > for a little gain in expressivity.
> >
> > -Brent
>
> Seconded,
>
> Daniel
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20111209/bb84de56/attachment.htm>

------------------------------

_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners


End of Beginners Digest, Vol 42, Issue 10
*****************************************

Reply via email to