How do I return Nothing from a function?

How do I return Nothing from a function? When there is no edge in the graph this code fails. *** Exception: Graph.hs:65:9-26: Irrefutable pattern failed for pattern (Data.Maybe.Just w) *Main> :t weight weight :: (Ix t1, Ix t2) => t1 -> t2 -> Array (t1, t2) (Maybe t) -> t weight x y g = w where (Just w) = g!(x,y) Thank you for your time. -- -- Sent from an expensive device which will be obsolete in a few months! :D Casey

You can't return Nothing, because your function doesn't return a maybe. If
you make it a maybe, you just need to return the value of g without further
processing.
Am 21.04.2014 19:53 schrieb "KC"
How do I return Nothing from a function?
When there is no edge in the graph this code fails. *** Exception: Graph.hs:65:9-26: Irrefutable pattern failed for pattern (Data.Maybe.Just w)
*Main> :t weight weight :: (Ix t1, Ix t2) => t1 -> t2 -> Array (t1, t2) (Maybe t) -> t
weight x y g = w where (Just w) = g!(x,y)
Thank you for your time.
--
--
Sent from an expensive device which will be obsolete in a few months! :D Casey
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners

If the result of weight is (Maybe t) instead of the then the result of the
array lookup can be passed out directly for the caller to check:
weight x y g = g!(x, y)
Is this what you mean?
Cheers,
Darren
On Apr 21, 2014 10:53 AM, "KC"
How do I return Nothing from a function?
When there is no edge in the graph this code fails. *** Exception: Graph.hs:65:9-26: Irrefutable pattern failed for pattern (Data.Maybe.Just w)
*Main> :t weight weight :: (Ix t1, Ix t2) => t1 -> t2 -> Array (t1, t2) (Maybe t) -> t
weight x y g = w where (Just w) = g!(x,y)
Thank you for your time.
--
--
Sent from an expensive device which will be obsolete in a few months! :D Casey
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners

Your problem is that you're explicitly saying that weight can NEVER fail to
return a value, so in the case that you run into a Nothing value you need
to return some default value instead. Alternatively you could change the
signature of weight to instead return a Maybe t type instead. If it's the
former, you need something like:
weight x y g = case g!(x,y) of
Just w -> w
Nothing -> 0 -- default weight here
or more idiomatically:
weight x y g = maybe 0 id (g!(x,y))
Not sure if you need the parens around g!(x,y) in that expression, but I
put them in just in case.
-R. Kyle Murphy
--
Curiosity was framed, Ignorance killed the cat.
On Mon, Apr 21, 2014 at 1:53 PM, KC
How do I return Nothing from a function?
When there is no edge in the graph this code fails. *** Exception: Graph.hs:65:9-26: Irrefutable pattern failed for pattern (Data.Maybe.Just w)
*Main> :t weight weight :: (Ix t1, Ix t2) => t1 -> t2 -> Array (t1, t2) (Maybe t) -> t
weight x y g = w where (Just w) = g!(x,y)
Thank you for your time.
--
--
Sent from an expensive device which will be obsolete in a few months! :D Casey
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (4)
-
Darren Grant
-
KC
-
Kyle Murphy
-
Norbert Melzer