2011-10-16 29 views
0

我想寫一個簡單的路徑查找函數,但我遇到了模糊的Haskell錯誤的問題。無法證明約束明確鍵入綁定

這是我的代碼(簡化指出錯誤)

routes :: int -> int -> [(int,int)] -> [[int]] 
routes start finish waypoints = [[4]] 

這是我得到

錯誤
ERROR "/home/freefrag/Routes":2 - Cannot justify constraints in explicitly typed binding 
*** Expression : routes 
*** Type   : a -> a -> [(a,a)] -> [[a]] 
*** Given context :() 
*** Constraints : Num a 

有人可以讓我知道我做錯了什麼?

+5

'int'是一個普遍量化的類型變量,不是整型值的類型。 – danportin

+0

哦,你是對的,非常感謝! – Maciek

回答

4

大寫您的類型。像這樣:

routes :: Int -> Int -> [(Int,Int)] -> [[Int]] 
routes start finish waypoints = [[4]] 

類型以大寫字母開頭。類型變量以小寫字母開頭。

1

你的意思是?:

Int -> Int -> [(Int, Int)] -> [[Int]] 

否則,請嘗試:

routes :: Num int => int -> int -> [(int,int)] -> [[int]] 
routes start finish waypoints = [[4]] 

見2.4節,標識符和運營商,在Haskell的98報告。它讀取報價:

「標識符是詞法區分爲兩個命名空間(第1.4節):那些具有小寫字母(可變標識符)開始和那些用大寫字母開頭(構造標識符)「。