Idris not recognizing equivalant types

47 Views Asked by At

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?

0

There are 0 best solutions below