[Haskell-cafe] pattern matching on date type

Bulat Ziganshin bulat.ziganshin at gmail.com
Thu Jan 1 04:51:52 EST 2009


Hello Max.cs,

Thursday, January 1, 2009, 11:36:24 AM, you wrote:

seems that you come from dynamic languages :)

Haskell has static typing meaning that your function can accept either
Tree or a as arguments. so you should convert a to Tree explicitly,
using Leaf


>   
>  
> thanks!
>  
>  
>  
> suppose we have 
>  
>  
>  
>> data Tree a = Leaf a | Branch (Tree a) (Tree a)  deriving Show
>  
>  
>  
> and how I could define a function foo :: a -> Tree a that
>  
>  
>  
> foo a = Leaf  a         where a is not a type of  Tree
>  
> foo b =  b                 where  b is one of the type of Tree (Leaf or Branch) ?
>  
>  
>  
> The following code seems not working......
>  
>  
>  
> foo (Leaf a) = a
>  
> foo a = Leaf a
>  
>  
>  
> saying 'Couldn't match expected type `a' against  inferred type `Btree a''
>  
>  
>  
> any idea?
>  
>  
>  
> Thanks,
>  
> Max
>  
>  
>  
>  

>  
>  
> From: Brandon S. Allbery KF8NH 
>  
> Sent: Thursday, January 01, 2009 7:35 AM
>  
> To: Max.cs 
>  
> Cc: Brandon S. Allbery KF8NH ; beginners at haskell.org ; haskell-cafe at haskell.org
>  
> Subject: Re: [Haskell-cafe] definition of data
>  

>  
>  
> On 2009 Jan 1, at 2:32, Max.cs wrote: 
>  
>   
>   
> data Tree a = a | Branch (Tree a) (Tree a)    deriving Show
>   
>  
>   
> but it seems not accpetable in haskell ?
>   


>  
> You need a constructor in both legs of the type:
>  

>  
>> data Tree a = Leaf a | Branch (Tree a) (Tree a) deriving Show
>  

>  
>  
>  



-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com



More information about the Haskell-Cafe mailing list