Send Beginners mailing list submissions to
        beginners@haskell.org

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
        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 to extend fuinctions? (Heinrich Ody)
   2.  Use a list as data for a data type? (Bryce Verdier)
   3. Re:  How to extend fuinctions? (Brent Yorgey)
   4. Re:  Use a list as data for a data type? (Brent Yorgey)
   5. Re:  Use a list as data for a data type? (Brent Yorgey)
   6. Re:  Use a list as data for a data type? (Bryce Verdier)
   7. Re:  Use a list as data for a data type? (Michael Orlitzky)
   8. Re:  Beginners Digest, Vol 56, Issue 33 (xiao Ling)


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

Message: 1
Date: Fri, 22 Feb 2013 18:35:19 +0100
From: Heinrich Ody <heinrich....@gmail.com>
Subject: [Haskell-beginners] How to extend fuinctions?
To: Beginners@haskell.org
Message-ID:
        <CAMc+G-=RU333QXTZCuqHs+J1hpsHHpO=lr9mqpa9_z7-kl0...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I have a function Delta and two sets S and A. Delta maps some elements
from (S x A) to S.
How can I extend Delta to some Delta' such that it assigns to every
pair in (S x A) that Delta is not defined for a value not occuring in
S?

Something like:
Delta' = if (Delta s a) /= _Undefined_
    then Delta s a
    else if () n
where n is the new value.

However Delta' should not assign values to pairs not in (S x A).
Note: (S x A) is meant to be the set-crossprroduct.

Background: I want to learn Haskell by building a small library for
Finite State Automata, B?chi Automata etc. I need this extension of
Delta for making automata complete.

Regards and thanks for reading,
Heinrich



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

Message: 2
Date: Fri, 22 Feb 2013 10:43:32 -0800
From: Bryce Verdier <bryceverd...@gmail.com>
Subject: [Haskell-beginners] Use a list as data for a data type?
To: Beginners@haskell.org
Message-ID: <5127bc54.40...@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Lets say I have a data type like so:

data IpAddress = IpAddress {$
          o1 :: !Int,$
          o2 :: !Int,$
          o3 :: !Int,$
          o4 :: !Int$
      } deriving (Show)$

which you can create by doing:
IpAddress 192 168 1 1

Is there a way to do the same thing with the input data in a list? Like:
IpAddress [192,168,1,1]

or using some operator (or combination of operators):Like (I'm guessing 
(<????>) isn't in use):
IpAddress <????> [192,168,1,1]

Thanks in advance,
Bryce



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

Message: 3
Date: Fri, 22 Feb 2013 14:06:36 -0500
From: Brent Yorgey <byor...@seas.upenn.edu>
Subject: Re: [Haskell-beginners] How to extend fuinctions?
To: beginners@haskell.org
Message-ID: <20130222190636.ga2...@seas.upenn.edu>
Content-Type: text/plain; charset=us-ascii

On Fri, Feb 22, 2013 at 06:35:19PM +0100, Heinrich Ody wrote:
> Hi,
> 
> I have a function Delta and two sets S and A. Delta maps some elements
> from (S x A) to S.
> How can I extend Delta to some Delta' such that it assigns to every
> pair in (S x A) that Delta is not defined for a value not occuring in
> S?

If your function delta is partial, then you should model this in
Haskell by having it return a Maybe, i.e.

  delta :: S -> Maybe A

Then you can define delta' like this:

delta' s a = case delta s a of
               Nothing -> n
               Just x  -> x

If your function delta really is partial in Haskell (i.e. it sometimes
crashes or returns 'undefined') then you cannot implement delta',
because there is no way to check whether a function returns undefined.
It is not a good idea to have partial functions in Haskell anyway.

-Brent



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

Message: 4
Date: Fri, 22 Feb 2013 14:07:43 -0500
From: Brent Yorgey <byor...@seas.upenn.edu>
Subject: Re: [Haskell-beginners] Use a list as data for a data type?
To: beginners@haskell.org
Message-ID: <20130222190743.gb2...@seas.upenn.edu>
Content-Type: text/plain; charset=us-ascii

On Fri, Feb 22, 2013 at 10:43:32AM -0800, Bryce Verdier wrote:
> Lets say I have a data type like so:
> 
> data IpAddress = IpAddress {$
>          o1 :: !Int,$
>          o2 :: !Int,$
>          o3 :: !Int,$
>          o4 :: !Int$
>      } deriving (Show)$
> 
> which you can create by doing:
> IpAddress 192 168 1 1
> 
> Is there a way to do the same thing with the input data in a list? Like:
> IpAddress [192,168,1,1]
> 
> or using some operator (or combination of operators):Like (I'm
> guessing (<????>) isn't in use):
> IpAddress <????> [192,168,1,1]

No, there isn't.  But you can make a function

  ipAddress :: [Int] -> IpAddress
  ipAddress [a,b,c,d] = IpAddress a b c d

-Brent



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

Message: 5
Date: Fri, 22 Feb 2013 15:14:33 -0500
From: Brent Yorgey <byor...@seas.upenn.edu>
Subject: Re: [Haskell-beginners] Use a list as data for a data type?
To: beginners@haskell.org
Message-ID: <20130222201433.ga6...@seas.upenn.edu>
Content-Type: text/plain; charset=us-ascii

On Fri, Feb 22, 2013 at 02:07:43PM -0500, Brent Yorgey wrote:
> On Fri, Feb 22, 2013 at 10:43:32AM -0800, Bryce Verdier wrote:
> > Lets say I have a data type like so:
> > 
> > data IpAddress = IpAddress {$
> >          o1 :: !Int,$
> >          o2 :: !Int,$
> >          o3 :: !Int,$
> >          o4 :: !Int$
> >      } deriving (Show)$
> > 
> > which you can create by doing:
> > IpAddress 192 168 1 1
> > 
> > Is there a way to do the same thing with the input data in a list? Like:
> > IpAddress [192,168,1,1]
> > 
> > or using some operator (or combination of operators):Like (I'm
> > guessing (<????>) isn't in use):
> > IpAddress <????> [192,168,1,1]
> 
> No, there isn't.  But you can make a function
> 
>   ipAddress :: [Int] -> IpAddress
>   ipAddress [a,b,c,d] = IpAddress a b c d

For that matter you can define the operator (<????>) yourself:

(<????>) :: (a -> a -> a -> a -> b) -> [a] -> b
f <????> [a,b,c,d] = f a b c d

Not sure how useful it is though.

-Brent



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

Message: 6
Date: Fri, 22 Feb 2013 12:40:15 -0800
From: Bryce Verdier <bryceverd...@gmail.com>
Subject: Re: [Haskell-beginners] Use a list as data for a data type?
To: beginners@haskell.org
Message-ID: <5127d7af.8070...@gmail.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Brent,

Thank you for the responses. I appreciate it. Bummer about there not 
being some kind of built-in/generic shortcut.

Bryce

On 02/22/2013 12:14 PM, Brent Yorgey wrote:
> On Fri, Feb 22, 2013 at 02:07:43PM -0500, Brent Yorgey wrote:
>> On Fri, Feb 22, 2013 at 10:43:32AM -0800, Bryce Verdier wrote:
>>> Lets say I have a data type like so:
>>>
>>> data IpAddress = IpAddress {$
>>>           o1 :: !Int,$
>>>           o2 :: !Int,$
>>>           o3 :: !Int,$
>>>           o4 :: !Int$
>>>       } deriving (Show)$
>>>
>>> which you can create by doing:
>>> IpAddress 192 168 1 1
>>>
>>> Is there a way to do the same thing with the input data in a list? Like:
>>> IpAddress [192,168,1,1]
>>>
>>> or using some operator (or combination of operators):Like (I'm
>>> guessing (<????>) isn't in use):
>>> IpAddress <????> [192,168,1,1]
>> No, there isn't.  But you can make a function
>>
>>    ipAddress :: [Int] -> IpAddress
>>    ipAddress [a,b,c,d] = IpAddress a b c d
> For that matter you can define the operator (<????>) yourself:
>
> (<????>) :: (a -> a -> a -> a -> b) -> [a] -> b
> f <????> [a,b,c,d] = f a b c d
>
> Not sure how useful it is though.
>
> -Brent
>
> _______________________________________________
> Beginners mailing list
> Beginners@haskell.org
> http://www.haskell.org/mailman/listinfo/beginners




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

Message: 7
Date: Fri, 22 Feb 2013 15:56:51 -0500
From: Michael Orlitzky <mich...@orlitzky.com>
Subject: Re: [Haskell-beginners] Use a list as data for a data type?
To: beginners@haskell.org
Message-ID: <5127db93.8020...@orlitzky.com>
Content-Type: text/plain; charset=ISO-8859-1

On 02/22/2013 03:40 PM, Bryce Verdier wrote:
> Brent,
> 
> Thank you for the responses. I appreciate it. Bummer about there not 
> being some kind of built-in/generic shortcut.
> 


You can try with a fold:

  >>> (((IpAddress $ 1) $ 2) $ 3) $ 4
  IpAddress 1 2 3 4

If you consider the type of the constructor along with the types passed
through the fold, it might become clearer why this can't work in general.




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

Message: 8
Date: Fri, 22 Feb 2013 19:27:28 -0500
From: xiao Ling <lingx...@seas.upenn.edu>
Subject: Re: [Haskell-beginners] Beginners Digest, Vol 56, Issue 33
To: beginners@haskell.org
Message-ID:
        <cah2t2p9bqqxmas4ozh4afvjyssfy430q3+ff8oyazn2t1sk...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"

Hi All: How do you define a function of signature h :: M Int -> M Int -> M
Int  so that h ( M x ) ( M y ) = M ( x + y ), but without unwrapping the
 value from the monad?

 This question is from the article "Trivial Monad" found at
http://blog.sigfpe.com/2007/04/trivial-monad.html. The provided answer is

h x y = x >>= (\x -> g x y)

or equivalently ( in context of the article )

h :: M Int -> M Int -> M Int
h x y = bind ( \x-> g x y ) x

where g is

g :: Int -> W Int -> W Int
g x y = y >>= (return . (+x))

for the monad:

data M a = M a deriving Show

Now I am a little confused, how can you put x in g if it takes an Int as
first parameter but x is M Int?

Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20130222/1e237638/attachment.htm>

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

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


End of Beginners Digest, Vol 56, Issue 37
*****************************************

Reply via email to