Проблема не failwith
сама по себе. Как указывает ошибка, неосновные конструкторы ограничены. Это должно стимулировать помещение всей логики инициализации в основной конструктор. Ваш пример кажется надуманным. Если вы покажете больше того, что вы пытаетесь сделать, возможно, кто-то может предложить решение.
Вот один из способов переработать ваш код:
type A (b) =
new () = A(4.0) then
if true then failwith ""
then
действует как привязка do
в неосновных конструкторах.
См. Страницу MSDN на Конструкторы для получения дополнительных параметров.
EDIT
kvb сделал хороший вывод относительно первичных конструкторов с побочными эффектами. Если это так, вы можете рассмотреть возможность перемещения вашей логики в статический метод. Это делает очевидным, что перед вызовом конструктора может быть выполнена другая работа.
type A (b) =
static member Create() =
if true then failwith ""
else A(4.0)