2
我正在爲CIS 194的作業問題工作。
我停留在Homework 5,問題6.功能類型實例
的類型類Expr
用於表示表達和用於容納變量中的任何表達式的類型類HasVars
。
該問題要求對M.Map String Integer -> Maybe Integer
實施Expr
的實例,其中M
是Data.Map
。
class Expr a where
add :: a -> a -> a
mul :: a -> a -> a
lit :: Integer -> a
這裏是爲Expr
實例Integer
的代碼。
instance Expr Integer where
add m n = m + n
mul m n = m * n
lit m = m
和功能的HasVars
實例,
instance HasVars (M.Map String Integer -> Maybe Integer) where
var s = M.lookup s
我很困惑,如何爲函數類型創建Expr
實例。 如何去模式匹配或從函數中提取數值? 該類型爲a-> a -> a
,所以我沒有Map
來提取這些值,var
來自ShowVars
用於將String
轉換爲上述函數。
我沒有提出解決問題的其他部分,因爲它可能包含破壞者。
在這個階段也許太先進,但如果你使用'Applicative'到'Maybe'結合s,您也可以將它用於功能部分。 'add = liftA2 $ liftA2(+)'。 –
謝謝,這是有道理的。然而'lit :: Integer - > a'仍然讓我失望。我需要使用一個整數來創建函數。所以我需要創建一個地圖或添加到一個? –
@dare_take'lit'可能會讓一個表達意思是不變的,所以讓它使用一個映射參數但忽略它。 –