2017-03-16 75 views
0

我是新來的Haskell,我堅持了一個例子。我想用或許型實驗,但我的代碼不會編譯:哈斯克爾函數定義的錯誤:在範圍上並不

divide100By :: Int a -> Maybe a 
divide100By x = case (Int x) of 
    Nothing -> Nothing 
    Just x -> 100/x 

main = putStrLn ("Result: " ++ show (divide100By 5)) 

但我總是得到錯誤:

Not in scope: data constructor 'Int' 

我怕我不太在Haskell中獲取函數定義(divide100By :: Int a - >也許是一個部分)...有人可以告訴我這裏有什麼問題嗎?

+1

'Int'並不需要一個類型參數,所以你要'divide100By ::詮釋 - >也許Int'。你的函數體也有至少3個其他問題... – Alec

回答

4

整數類型爲Int,寫Int a意味着什麼,因爲Int不帶參數。

而且,Int x不是一個表達式,所以你不能case上。

此外,如果您有Maybe a類型,並且您想檢查其值是多少,則可以使用caseNothing/Just x。相反,您需要構建一個Maybe a類型。

試試這個:

divide100By :: Int -> Maybe Int 
divide100By 0 = Nothing 
divide100By x = Just (100 `div` x) 

divide100By :: Int -> Maybe Int 
divide100By y = case y of 
    0 -> Nothing 
    x -> Just (100 `div` x) 
+0

謝謝,它確實有效,我之前已經看到過這個解決方案。但是,你能否告訴我爲什麼'案件'不起作用? –

+0

@ZachJ'case'做工作(見編輯),但你只能'的輸入,這是一個整數,而不是一個case''也許Int',所以你不能樣式反對'沒有匹配/僅售X '。 – chi