A ligature substitution replaces a sequence of glyphs by one glyph, which is called a ligature. An example that supplies some standard ligatures:

lookup decompose {
    sub f f i -> ffi
    sub f f -> ff
    sub f i -> fi;
}

At the left side of -> you should supply a sequence of glyphs. At the right side one glyph should appear. Note: the order in which the ligatures are applied is not changed (except in cases where it does not matter). The "ffi" ligature should be placed before the "ff" ligature, otherwise the lookup will have seen "ff" and have replaced it before the "ffi" ligature is seen.