LINUX.ORG.RU

История изменений

Исправление balsoft, (текущая версия) :

Non-exhaustive patterns – правда очень неприятная тема в хаскеле. Но в целом язык неплох. Для твоих задач правда можно использовать LiquidHaskell:

module Main where

{-@ f :: (Num a, Num p) => {v:a | v = 0} -> p @-}
f 0 = 3

main = print (f 1)
Error: Liquid Type Mismatch
  Inferred type
    VV : {v : Integer | v == 1}
 
  not a subtype of Required type
    VV : {VV : Integer | VV == 0}

(ошибка именно в main, а не в f)

Исходная версия balsoft, :

Non-exhaustive patterns – правда очень неприятная тема в хаскеле. Но в целом язык неплох. Для твоих задач правда можно использовать LiquidHaskell:

module Main where

{-@ f :: (Num a, Num p) => {v:a | v = 0} -> p @-}
f 0 = 3

main = print (f 1)
Error: Liquid Type Mismatch
  Inferred type
    VV : {v : Integer | v == 1}
 
  not a subtype of Required type
    VV : {VV : Integer | VV == 0}