Here is a simpler case of what I want to do ..

1) To function1 pass in (Maybe Int).

2) If "Nothing" then pass nullPtr to C function.

3) If "Just 1", then pass a pointer to a "1" to teh same C function.

Thanks, Vasili


On Thu, May 1, 2008 at 8:18 PM, Galchin, Vasili <vigalchin@gmail.com> wrote:
Sorry .. my example was bad.  I want to use "x" .. in  then  branch where it occur ...

e.g.

      bonzo :: Maybe Bozo -> IO ()
      bonzo  maybe_bozo = do
          case maybe_bozo of
              Just (Bozo x) -> x ........
              _                    -> .........

??

Thanks, V.   
 

On Thu, May 1, 2008 at 7:50 PM, Luke Palmer <lrpalmer@gmail.com> wrote:
2008/5/2 Galchin, Vasili <vigalchin@gmail.com>:
>
> data Bozo =
>     Bozo {
>       id :: Int
>     }
>
> bonzo :: Maybe Bozo -> IO ()
> bonzo   maybe_bozo = do
>    if maybe_bozo == (Just (Bozo  x))
>       then
>          return ()
>       else
>          return ()

bonzo maybe_bozo =
   case maybe_bozo of
       Just (Bozo x) -> return ()
       _             -> return ()

Or equivalently:

bonzo (Just (Bozo x)) = return ()
bonzo _               = return ()

You should watch out for your use of id as a field name, since id is a
builtin function and you will get ambiguity errors.

Luke