[Haskell-cafe] checking types with type families
Daniel Fischer
daniel.is.fischer at web.de
Wed Jun 23 00:21:18 EDT 2010
On Wednesday 23 June 2010 05:46:46, Evan Laforge wrote:
> I have a parameterized data type:
> > data Val result = VNum Double | VThunk (SomeMonad result)
> > type Environ result = Map Symbol (Val result)
>
> I have a class to make it easier to typecheck Vals:
> > class Typecheck a where
> > from_val :: Val result -> Maybe a
Would it work if you made Typecheck a two-parameter type class?
class Typecheck result a where
from_val :: Val result -> Maybe a
instance Typecheck result Double where ...
instance Typecheck result (SomeMonad result) where
> >
> > instance Typecheck Double where
> > from_val (VNum d) = Just d
> > from_val _ = Nothing
>
> Now I can write
>
> > lookup_environ :: (Typecheck a) => Symbol -> Environ result -> Maybe a
>
> Now of course there's a question of how to write Typecheck for VThunk.
> I would like to be able to call 'lookup_environ' expecting a
> 'SomeMonad result' and get Nothing or Just depending on if it's
> present.
>
> > instance Typecheck (SomeMonad result) where
> > from_val (VThunk f) = Just f
>
> But I need something to say that the 'result' from the instance head
> is the same as the 'result' from the class declaration, because
> otherwise I get
>
> Couldn't match expected type `result'
> against inferred type `result1'
>
More information about the Haskell-Cafe
mailing list