/** * Semigroup * * 1. a.concat(b).concat(c) is equivalent to a.concat(b.concat(c)) (associativity) * * concat :: Semigroup a => a ~> a -> a */ import { HKT, KindOf, URIS } from './HKT'; export interface Semigroup { readonly URI: F; readonly concat: (a: HKT, b: HKT) => HKT; } export interface Semigroup1 { readonly URI: F; readonly concat: (a: KindOf, b: KindOf) => KindOf; } export interface Semigroup2 { readonly URI: F; readonly concat: (a: KindOf, b: KindOf) => KindOf; }