我正在研究一個將字串轉換為自定義資料型別的 Haskell 函式:Position,它應該只包含一個字符(AH)和一個 Int(1-4)。(即 A1,B3 , H4)
下面是函式的用法: toPosition 只給出由字串命名的位置,如果字串不是有效的位置名稱,則給出 Nothing。
這是我的嘗試:
我將資料型別定義為:
data Position = Pos Char Int
我嘗試在終端中使用它運行它:
toPosition "H2"
GHCi 回傳錯誤:
No instance for (Show Position) arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it
有人對此有想法嗎?任何幫助,將不勝感激!
uj5u.com熱心網友回復:
這引發錯誤的原因是它無法列印Position,因為您沒有將其設為Show. 因此,您可以將其實作為:
data Position = Pos Char Int deriving Show
但是你的功能也很復雜。您可以簡化isValidChar并isValidInt使用:
isValidChar :: Char -> Bool
isValidChar x = 'A' <= x && x <= 'H'
isValidInt :: Char -> Bool
isValidInt x = '1' <= x && x <= '4'
對于該toPosition函式,您可以在串列上使用模式匹配,因為 aString是Chars 的串列:
import Data.Char(digitToInt)
toPosition :: String -> Maybe Position
toPosition [c, n]
| isValidChar c && isValidInt n = Just (Position c (digitToInt n))
toPosition _ = Nothing
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474044.html
標籤:哈斯克尔
上一篇:Haskell陣列條件混亂
