[Haskell-cafe] Help to write type-level function
Dmitry Kulagin
dmitry.kulagin at gmail.com
Wed Feb 27 08:33:13 CET 2013
Hi,
I try to implement typed C-like structures in my little dsl.
I was able to express structures using type-level naturals (type Ty is
promoted):
> data Ty = TInt | TBool | TStruct Symbol [Ty]
That allowed to implement all needed functions, including type-level
function:
> type family Get (n :: Nat) (xs :: [Ty]) :: Ty
But it is not very convenient to identify struct's fields using naturals,
and I wanted to change Ty definition to:
> data Ty = TInt | TBool | TStruct Symbol [(Symbol, Ty)]
It is much closer to how C-struct looks, but I was unable to implement
required type function:
> type family Find (s :: Symbol) (xs :: [(Symbol,Ty)]) :: Ty
Which just finds a type in a associative list.
Could someone give me a hint, how to do it?
Or perhaps, is it just impossible thing to do?
Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130227/fb3cb718/attachment.htm>
More information about the Haskell-Cafe
mailing list