app->singleton( BaseConverter::class, fn () => match (true) { extension_loaded('bcmath') => new BCMathBaseConverter(), extension_loaded('gmp') => new GmpBaseConverter(), default => new NativeBaseConverter(), } ); $this->app->singleton( Shuffler::class, fn () => new FisherYatesShuffler() ); $this->app->singleton( SerialCasterBuilder::class, function (Application $app) { $converter = $app->make(BaseConverter::class); $shuffler = $app->make(Shuffler::class); $seed = Config::integer('serial-caster.seed'); return new SerialCasterBuilder($converter) ->withShuffler($shuffler) ->withSeed($seed); } ); } }