/** * Semigroupoid * * 1. a.compose(b).compose(c) === a.compose(b.compose(c)) (associativity) * * compose :: Semigroupoid c => c i j ~> c j k -> c i k */ import { HKT, KindOf, URIS } from './HKT'; export interface Semigroupoid { readonly URI: F; readonly compose: (a: HKT, b: HKT) => HKT; } export interface Semigroupoid1 { readonly URI: F; readonly compose: (a: KindOf, b: KindOf) => KindOf; } export interface Semigroupoid2 { readonly URI: F; readonly compose: (a: KindOf, b: KindOf) => KindOf; }