use ([,type]) to represent tuple.

for example, the fillOrder function in [0x 2.0][1]:

    function fillOrder(
        LibOrder.Order memory order,
        uint256 takerAssetFillAmount,
        bytes memory signature
    )
        public
        returns (LibFillResults.FillResults memory fillResults);

the function selector is calculated using:

fillOrder((address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes),uint256,bytes) 

which the keccak-256 is: b4be83d519a652e54a6073d7e55643f575508112b09dcc74264b807477b576c5, the first 4 bytes is: b4be83d5

and you can confirm this by looking at this tx which called fillOrder: https://etherscan.io/tx/0x4811b7492bd845a46a052b063f943c4760174e932cb171ca25a934de6e7e4da4 


  [1]: https://etherscan.io/address/0x4f833a24e1f95d70f028921e27040ca56e09ab0b#code