私はIdrisにできるだけ多くのシステムF(多型ラムダ計算)を実装しようとしています。私は今、私は一例で実証したい問題に直面している:あなたが見ることができるように、任意の2つのFoo値が等しい data Foo = Bar Nat
Eq Foo where
(Bar _) == (Bar _) = True
data Baz: Foo -> Type where
Quux: (n:
私はEratosthenes篩の定義をIdrisに翻訳するのに苦労しています。ここでの機能は、これまでのところです: %default total
eratos : Nat -> (l : List Nat) -> { auto ok: NonEmpty l } -> List Nat
eratos limit (prime :: rest) =
if prime * prime
だから私はエラボレータ反射(https://eb.host.cs.st-andrews.ac.uk/drafts/elab-reflection.pdf)にこの論文を読んで、私は(セクション5.2で見つかった)この戦術アウトこれを試してみたかったことを決めた。 mush : Elab()
mush =
do attack
x <- gensym "x"
intr
私は、joinがflattenとmuとして知られていることをIdrisのドキュメントで気付いた。 Idris> :doc join
Prelude.Monad.join : Monad m => m (m a) -> m a
Also called flatten or mu
The function is Total
IIRC、mu(又はμ)は、再帰データ型のためのバ