a | b は a で型づけできないようなら b で型づけする型。これで reduce のようなオーバーロードも型づけできる