The method in your interface is declared in curry form, and your implementation is populated: in short: the method in the interface is a function that takes one argument and returns another function with the remaining arguments. In the opposite implementation, accepts all arguments in one part (packed in a tuple)
open System type ICarRentalService = abstract member CalculatePrice: pickupDate:DateTime -> returnDate:DateTime -> pickupLocation:string -> vehiclePreference:string -> float let x : ICarRentalService = failwith "not implemented" let a = x.CalculatePrice
To fix the code, you need to either implement the curried implementation or declare-tupled. Curried version will not work with WCF, so consider using a fixed version
type ICarRentalService = abstract member CalculatePrice: pickupDate:DateTime * returnDate:DateTime * pickupLocation:string * vehiclePreference:string -> float type CarRentalService() = interface ICarRentalService with override this.CalculatePrice(pickupDate:DateTime, returnDate:DateTime, pickupLocation:string, vehiclePreference:string) = 5.5
desco source share