Quick actions

cmd+k|ctrl+k

Navigation

Languages

Semigroup and monoid type classes in Bash

Snippet info

Language

Bash

Visibility

public

Author

rightfold

Created

2016-09-26T12:58:49Z

Updated

2016-10-17T08:42:02Z

semigroup_string_append() {
    echo -n "$1$2"
}
monoid_string_empty() {
    true
}

semigroup_int_append() {
    echo -n $(($1 + $2))
}
monoid_int_empty() {
    echo -n 0
}

fold() {
    if [ "$#" -eq 1 ]; then
        echo -n "$("monoid_$1_empty")"
    else
        echo -n "$("semigroup_$1_append" "$2" "$(fold "$1" "${@:3}")")"
    fi
}

echo "$(fold string foo bar baz)"
echo "$(fold int 1 2 3)"
INFO