2017-04-10 50 views
1

我有以下代碼中:榆樹:如何登錄一個與foldl

findPerson name peeps = List.foldl 
    (\a b -> case b of 
     Just _ -> b 
     Nothing -> if a.name == name then 
      Just a 
      else Nothing 
    ) Nothing peeps 

我想記錄的foldl內的ab值。我已經試過:

findPerson : String -> List Person -> Maybe Person 
findPerson name peeps = List.foldl 
    (\a b -> 
     Debug.log(a) 
     Debug.log(b) 
     case b of 
      Just _ -> b 
      Nothing -> if a.name == name then 
       Just a 
       else Nothing 
    ) Nothing peeps 

然而,這將引發錯誤

I am looking for one of the following things: 

a closing paren ')' 
whitespace` 

什麼我做錯了,我怎麼可以登錄內部foldl值是多少?

回答

3

您可以使用let in block進行調試。

let 
    _ = Debug.log "a" a 
    _ = Debug.log "b" b 
in 
    case b of 
... 

的函數(或λ)只能返回一次。 Debug.log返回第二個參數不變,因此您必須將模式與某些事物相匹配 - 並且因爲您不需要參數兩次,但是Debug.log的副作用可以通過模式將其與_進行匹配(忽略) 。

+0

這工作的一種享受。乾杯! – Rich

2

你也可以把Debug.log直接case statement內,或if statement出於同樣的原因裏面@farmio提到:) - 像這樣:

findPerson name peeps = List.foldl 
    (\a b -> 
     case (Debug.log "inspect b: " b) of 
      Just _ -> 
       b 
      Nothing -> 
       if (Debug.log "person name is: " a.name) == name then 
        Just a 
       else 
        Nothing 
    ) Nothing peeps 

不乾淨,但有時比較有用,因爲它更緊湊。