2016-04-14 13 views
-2

Evet, Belki bir Arg'yi veya başka bir Monad türünü kabul eden bir fonksiyonum var.Tek satırlı bir Monad'den gerçek VEYA varsayılan değer nasıl elde edilir?

func1 :: Maybe Int -> Int 
func1 mbArg = 
    let var1 = case myArg of 
       Just x -> x 
       Nothing -> -1 
    -- .... 

aynı şeyi ama mapM, mapM_ veya fmap veya <$> veya benzeri bir şey gibi bir şey kullanarak yapmak için başka bir yolu var mı? Yani, değer olup olmadığını kontrol edin ve eğer yoksa, OR eğer varsayılan değeri geri almazsa gerçek değeri çıkartın. Başka bir deyişle

, ben böyle bir şey yapmak istiyorum:

my_val = get_value_or_my_arg() || -1 

hat fonksiyonu tek derken fmap gibi monads ile çalışır bazı işlev demek.

+4

[Nasıl] (http://stackoverflow.com/q/36602353/1126841) [birçok] (http://stackoverflow.com/q/36603904/1126841) kez aynı soruyu soracak mısın? – chepner

+0

@chepner, bence 8. Ne zaman sordum? –

cevap

0

düzenleme: Veya aşağıdaki yorum başına fromMaybe kullanın.

Sorunuzu yanlış anlamadıkça, neden bu işe yaramaz?

value_or_default :: Maybe Int -> Int -> Int 
value_or_default maybe default_value = case maybe of 
             Just value -> value 
             Nothing -> default_value 

Ve sonra derim:

my_val = value_or_default my_val (-1) 
+1

Bu, yalnızca önceki soruya verilen yanıt olan 'fromMaybe' (ters argümanlar ile) 'dir. – chepner

+0

Ah, bu soruyu zaten sormuştu. Ve TIL 'fromMaybe' :) –

+0

ve ne ise hiçbir şey? –

İlgili konular