cevap
Sen lens
kullanırsanız, over both f
veya both %~ f
kullanabilirsiniz Control.Arrow
> map (f *** f) a
den (***)
operatörü kullanabilir veya kendi yardımcı işlevi
> let both f (x, y) = (f x, f y)
> map (both f) a
tanımlayabilirsiniz. Bu, daha da karmaşık olmanın avantajına sahiptir - örneğin, bir çift listeniz varsa, both.mapped +~ toUpper
(:: ([Char],[Char]) -> ([Char],[Char])
) gibi bir şeyi kullanabilirsiniz.
Alternatif çözüm:
import Data.Bifunctor
bimap f f pair
Bifunctor.bimap
de temelde Arrow.(***)
aynıdır, ancak diğer bifunctors (gibi Either a b
) için çalışır.
ARASÖZ:
orada durum için önceden tanımlanmış bir şey değildir aynı öğe iki kez yazın sahip (,)
için Functor
, Applicative
vb örneklerini yazamazsınız olmasıdır sebebi.
data Pair a = Pair a a deriving Show
instance Functor Pair where
fmap f (Pair x y) = Pair (f x) (f y)
Şimdi map (fmap (+1)) [Pair 12 14, Pair 17 18]
gibi şeyler yazabilirsiniz: Bir kendi "Vektör benzeri" tipi ile bu problemi olmazdı. Aynı-eleman tipi çiftleri ile çok çalışıyorsanız
instance Applicative Pair where
pure x = Pair x x
(Pair f g) <*> (Pair x y) = Pair (f x) (g y)
, böyle bir karşı (,)
geçiş yararlı olabilir: Eğer senin Pair
üzerinde farklı işlemler kullanmak isterseniz Veya, bir adım daha ileri gidebilir yazın.
Diggresyon için teşekkürler. –
- 1. kısa yol yazmak için (\ (x, y) -> (f x g y)) lambda daha özlü</p> <pre><code>\(x, y) → (f x, g y) :: (a, b) → (c, d) </code></pre> <p>geç nasıl fonksiyonları <code>f :: a → b</code>, <code>g :: c → d</code> için
- 2. P (a <= X <= b) değerini görüntülemek için expression() yöntemini almanın bir yolu var mı?
- 3. İki-arg işlevi bir diziye nasıl uygulanır?</p> <pre><code>[a b c ...] </code></pre> <p>ve bir işlev <code>(f x y)</code>:
- 4. typeof (x) şablon argümanı olarak mı?</p><code>f</code> bir fonksiyonu ve <code>y</code> bir değişkendir <pre><code>auto x = f(y); </code></pre> <p>, hem başka bir yerde tanımlanmış:
- 5. X * 2 + 1 hesaplamanın kısa bir yolu var mı? <br> <code>x = x*2;</code><code>x *= 2;</code></p> <p>gibi yazılmış olabilir
- 6. Bunu yapmak için daha iyi bir şey var mı?
- 7. Paylaşılan_ptr <void>'u paylaşılan_ptr <T>'a yayınlamanın bir yolu var mı?
- 8. `void f (A <I>, tuple <T *...>)` dan daha özel değil (A <0>, tuple <T *...>) `` dır?
- 9. Bul bütün x ve y değerleri ben iki diziyi <code>x</code> ve <code>y</code> sahip
- 10. Bunu F # yazmanın bir yolu var mı?
- 11. <a> etiketi
- 12. x = (y/n) + (y% n? 1: 0) hesaplamanın daha zarif bir yolu var mı?
- 13. #if tanımlı (x) || (y); bu geçerli mi?</p> <pre><code>#if defined(x) || y </code></pre> <p>yukarıdaki deyimi ne demektir: Bir inceleme sırasında
- 14. nasıl koşullu bağlı f kullanacağı bir bağdaştırıcının ihtiyaç</p> <pre><code>def f : Kleisli[Future, Context, Seq[Tip]] = ??? </code></pre> <p>f varolan yöntem göz önüne alındığında şartlı
- 15. En Büyük Numara <x?
- 16. TensorFlow operatör aşırı yükleme</p> <pre><code>tf.add(x, y) </code></pre> <p>ve TensorFlow içinde</p> <pre><code>x + y </code></pre> <p>arasındaki fark nedir
- 17. Bunu yazmanın daha iyi bir yolu var mı?
- 18. Git, <<<<<<< HEAD dosyasına
- 19. VB'yi kullanmak, son X miktarı öğesinin ListBox'tan kaldırılmasının daha iyi bir yolu var mı?
- 20. </p> <pre><code><a [routerLink]="['/LoggedIn/Profile']">Static Link</a> </code></pre> <p>herşey iyi çalışıyor, RouterLink dinamik
- 21. İki listeye katılmalı, bunları sıralamalı ve çoğaltmaları kaldırmalıyım. Bunu yapmanın daha iyi bir yolu var mı?
- 22. Neden <$> g <$> g <$> x karşılığı (f. G) <$> x <$> doğru olarak ilişkilendirilemez mi?
- 23. Nasıl kullanılır? "<% = Request.getContextPath()%>" daha iyi "../"
- 24. Neden powershell() bazen çalıştırdığım kodu yazdırıyor?</p> <pre><code>function f { $a=2 } $a </code></pre> <p>O yazdırır:</p> <pre><code>C:\Users\vics> function f { $a=2 } $a </code></pre> <p>Neden bu kadar weired ben varsa
- 25. Bu nokta neden ücretsiz tanım Haskell'de çalışmıyor?</p> <pre><code>relativelyPrime x y = gcd x y == 1 </code></pre> <p>noktası içermeyen:
- 26. C# 'da, bir diziyi döngü olmadan Stack <T>'a dönüştürmenin bir yolu var mı?
- 27. 'Union' a tek bir öğe için daha iyi bir linux yolu var mı?
- 28. <script><!--//--></script> Modern bir amacı var mı?
- 29. İlk öğenin tümünü değil, daha iyi bir yolu var mı?
- 30. Dinamik İfade Oluşturma <Func<T,Y>>
veya belki de sadece bir lambda: 'harita (\ (x, y) -> (f x, f y)) a' – MtnViewMark