[Haskell-cafe] Re: ambiguous partially defined type problem
Brian Hulley
brianh at metamilk.com
Fri Sep 15 11:31:57 EDT 2006
Maarten wrote:
> Only update (see code below) is a bit ugly (I have no idea why I need
> fixCastUpdate)
> class (Show a, Typeable a) => ICustom a where
[snip]
> update :: a -> (forall b. (ICustom b) => b -> b) -> a
> update a f = f a
>
> instance ICustom Node where
> getVal (Node n) f = getVal n f
> update (Node n) f = Node (update n f)
>
> updateM :: forall a b. (ICustom a, ICustom b) => (a -> b) ->
> NodeState () updateM f = do
> s <- get
> let s' = update s (fixCastUpdate f)
> put s'
Hi Maarten -
Looking at this again, I wonder if the following changes would work:
-- this change is not strictly necessary
update :: a -> (a -> a) -> a
updateM :: (forall a. ICustom a => a -> a) -> NodeState ()
updateM f = do
s <- get
let s' = update s f
put s'
I think the reason why fixCastUpdate was needed in your original definition
of updateM is because the type of f seems to be too general (a->b) compared
to the type of f in the update method of ICustom (b->b)
Regards, Brian.
--
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.
http://www.metamilk.com
More information about the Haskell-Cafe
mailing list