import scala.concurrent.duration.*
import scala.util.CommandLineParser
object Instances {
given finiteDurationClpFromString: CommandLineParser.FromString[FiniteDuration] with {
override def fromString(s: String): FiniteDuration =
Duration(s).asInstanceOf[FiniteDuration]
}
}
import Instances.given
@main def foo(duration: FiniteDuration): Unit = println(s"hello, $duration")
def f: Unit = summon[CommandLineParser.FromString[FiniteDuration]] // OK
Output
-- [E172] Type Error: duration-arg.scala:14:0 --------------------------------------------------------------------------
14 |@main def foo(duration: FiniteDuration): Unit = println(s"hello, $duration")
|^
|No given instance of type scala.util.CommandLineParser.FromString[concurrent.duration.FiniteDuration] was found for parameter fs of method parseArgument in object CommandLineParser
1 error found
Expectation
Works, as does the given in lexical scope:
import scala.concurrent.duration.*
import scala.util.CommandLineParser
//object Instances {
given finiteDurationClpFromString: CommandLineParser.FromString[FiniteDuration] with {
override def fromString(s: String): FiniteDuration =
Duration(s).asInstanceOf[FiniteDuration]
}
//}
//import Instances.given
@main def foo(duration: FiniteDuration): Unit = println(s"hello, $duration")
def f: Unit = summon[CommandLineParser.FromString[FiniteDuration]]
I also experienced this, e.g. this makes it impossible to define any default command line parsers along with the definition of a custom main annotation
Compiler version
3.3.1
Minimized code
Output
Expectation
Works, as does the given in lexical scope:
Observed at https://discord.com/channels/632150470000902164/632150470000902166/1184435716365746187