Метод в вашем интерфейсе объявлен в каррированном виде, а ваша реализация имеет кортеж:
если кратко: метод в интерфейсе - это функция, которая принимает один аргумент и возвращает другую функцию с остальными аргументами. В противоположной реализации все аргументы принимаются одним куском (упаковано в кортеж)
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 // DateTime -> DateTime -> string -> string -> float
let y = a (DateTime.Now) // DateTime -> string -> string -> float (first argument is bound)
Для исправления кода вам нужно либо сделать реализацию каррированной, либо объявить с тьюплингом. Карри версия не будет работать с WCF, поэтому рассмотрите возможность использования кортежной версии
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