23

私の質問は、おそらく例の形で説明するのが最も簡単です。

type family   Take (n :: Nat) (xs :: [k]) :: [k]
type instance Take 0     xs        = '[]
type instance Take (n+1) (x ': xs) = x ': Take n xs

ただし、ここでの2番目のインスタンスは拒否されます。これは(+)、型族自体であるため、引数で使用できないためです。Succしかし、Natsのマッチングに通常使用されるものはないようです。

だから、これを表現することができます。もしそうなら、どのように?

更新しますisZeroのとisEven関数GHC.TypeLitsが「Destructingtype-nats」という見出しの下にあることに気付きました。どういうわけかタイプレベルで使用するためのものですか?私はそうは思わないでしょう…しかし、主に私が方法を見ることができないからです。:)

4

1 に答える 1

5

これは、TypeNatsの現在の実装における既知の問題だと思います。しかし、それは取り組んでいます、見てください: https ://plus.google.com/117760254622432568621/posts/iMYU2SMViay

于 2012-09-23T09:38:47.373 に答える