mirror of
https://github.com/IBM/fp-go.git
synced 2025-08-10 22:31:32 +02:00
initial checkin
Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com>
This commit is contained in:
11
number/magma.go
Normal file
11
number/magma.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package number
|
||||
|
||||
import (
|
||||
M "github.com/ibm/fp-go/magma"
|
||||
)
|
||||
|
||||
func MagmaSub[A int | int8 | int16 | int32 | int64 | float32 | float64 | complex64 | complex128]() M.Magma[A] {
|
||||
return M.MakeMagma(func(first A, second A) A {
|
||||
return first - second
|
||||
})
|
||||
}
|
18
number/magma_test.go
Normal file
18
number/magma_test.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package number
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
M "github.com/ibm/fp-go/magma"
|
||||
)
|
||||
|
||||
func TestSemigroupIsMagma(t *testing.T) {
|
||||
sum := SemigroupSum[int]()
|
||||
|
||||
var magma M.Magma[int] = sum
|
||||
|
||||
assert.Equal(t, sum.Concat(1, 2), magma.Concat(1, 2))
|
||||
assert.Equal(t, sum.Concat(1, 2), sum.Concat(2, 1))
|
||||
}
|
13
number/monoid.go
Normal file
13
number/monoid.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package number
|
||||
|
||||
import (
|
||||
M "github.com/ibm/fp-go/monoid"
|
||||
)
|
||||
|
||||
func MonoidSum[A int | int8 | int16 | int32 | int64 | float32 | float64 | complex64 | complex128]() M.Monoid[A] {
|
||||
s := SemigroupSum[A]()
|
||||
return M.MakeMonoid(
|
||||
s.Concat,
|
||||
0,
|
||||
)
|
||||
}
|
11
number/monoid_test.go
Normal file
11
number/monoid_test.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package number
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
M "github.com/ibm/fp-go/monoid/testing"
|
||||
)
|
||||
|
||||
func TestMonoidSum(t *testing.T) {
|
||||
M.AssertLaws(t, MonoidSum[int]())([]int{0, 1, 1000, -1})
|
||||
}
|
11
number/semigroup.go
Normal file
11
number/semigroup.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package number
|
||||
|
||||
import (
|
||||
S "github.com/ibm/fp-go/semigroup"
|
||||
)
|
||||
|
||||
func SemigroupSum[A int | int8 | int16 | int32 | int64 | float32 | float64 | complex64 | complex128]() S.Semigroup[A] {
|
||||
return S.MakeSemigroup(func(first A, second A) A {
|
||||
return first + second
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user