Recursion on TypeNats

Carter Schonwald carter.schonwald at gmail.com
Sat Oct 25 18:20:41 UTC 2014


because you haven't helped write a patch change it yet :) 


-Carter

On Sat, Oct 25, 2014 at 9:53 AM, Barney Hilken <b.hilken at ntlworld.com>
wrote:

> If you define your own type level naturals by promoting
> data Nat = Z | S Nat
> you can define data families recursively, for example
> data family Power :: Nat -> * -> *
> data instance Power Z a = PowerZ
> data instance Power (S n) a = PowerS a (Power n a)
> But if you use the built-in type level Nat, I can find no way to do the same thing. You can define a closed type family
> type family Power (n :: Nat) a where
> 	Power 0 a = ()
> 	Power n a = (a, Power (n-1) a)
> but this isn't the same thing (and requires UndecidableInstances).
> Have I missed something? The user guide page is pretty sparse, and not up to date anyway.
> If not, are there plans to add a "Successor" constructor to Nat? I would have thought this was the main point of using Nat rather than Int.
> Barney.
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/glasgow-haskell-users/attachments/20141025/df1b7aab/attachment.html>


More information about the Glasgow-haskell-users mailing list