簡體   English   中英

Scala相當於Haskell第一和第二

[英]Scala equivalent of Haskell first and second

Haskell具有非常方便的函數,稱為firstsecond ,它們將函數應用於一對中的一個元素:

first fn (a,b) = (fn a, b)
second fn (a,b) = (a, fn b)

這些功能是否在標准Scala庫中定義?

編輯:我知道定義它們很容易,但是在可能的情況下,使用帶有標准名稱的標准函數會更干凈...

def first[A, B, X](fn: A => X)(pair: (A, B)): (X, B) = (fn(pair._1), pair._2)
def second[A, B, X](fn: B => X)(pair: (A, B)): (A, X) = (pair._1, fn(pair._2))

這些功能是否在標准Scala庫中定義?

不。 這不是在Scala中經常出現的,以至於保證在標准庫中。 如果沒有大量的代碼(或宏),很難將其歸納為任何Arue元組。

Haskell的Arrows( firstsecond在其中)在Scalaz中實現:

Scalaz來源

一些例子

盡管從技術上講它不是標准庫,但它是穩定的,並且維護得很好。

更新

語法有點麻煩(也許還有另一種方法?):

import scalaz._
import Scalaz._

val f = (x: Int) => x + 1
val g = f.second[String]
g("1", 2) //> ("1", 3)

// or with type inference

f second ("1", 2) //> ("1", 3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM