impl variant constructor