1

I'm trying to implement Binomial Heaps in Idris, so I defined a type

data Bin = MSEnd | B0 Bin | B1 Bin

where MSEnd stands for "Most Significant End" (e.g. B0 (B1 (B1 MSEnd)) represents 6).

I also defined a function to add them together. I have tested this, and it works as expected (as does the helper function succ, which increments a binary number).

plus : Bin -> Bin -> Bin
plus MSEnd b = b
plus b MSEnd = b
plus (B0 a) (B0 b) = B0 $ plus a b
plus (B0 a) (B1 b) = B1 $ plus a b
plus (B1 a) (B0 b) = B1 $ plus a b
plus (B1 a) (B1 b) = B0 . succ $ plus a b

However, in a different function whose type signature is dependent on this plus function, I get the compiler error

Type mismatch between
                b1
        and
                plus b1 MSEnd

Based on the definition of plus, it seems like the Idris compiler should easily be able to determine that these are equal. What is wrong here?

  • 1
    It would help if you could provide `succ` and `in a different function` or provide a gist. Otherwise one can only guess what is happening. – Markus Mar 12 '20 at 11:06
  • Is plus known to be total? Try putting a "total" annotation on its type signature. – pdxleif Mar 13 '20 at 11:30

0 Answers0