Мера - это просто функция, которая может быть запущена LiquidHaskell во время проверки для использования при уточнениях и проверке завершения.Вы, вероятно, уже знали это.
Причина, по которой ваш первый пример "работает" (я думаю, что он неполон как есть, но я могу сказать, к чему вы стремились) состоит в том, что len
уже определено как мера в прелюдии LiquidHaskell (технически это «мера класса», что означает, что он полиморфен и, следовательно, может использоваться как со списками []
, так и с вашими пользовательскими List
).Предполагая, что вы добавили аннотации для Nil
и Cons
, как в этом ответе из вашего предыдущего вопроса, len
, использованный в уточнении для mymap
, - это не ваш len
, апрелюдия len
, которая уже является мерой.
Во втором примере measure
требуется, поскольку ln
является новым символом в пространстве имен меры и не существует, пока вы его не создадите.