Need help , confuse about 'value is a function while a set was expected' error;

hello everyone, i’m new to nix , setup nix-darwin on my MBP for a while .

my question is fail on a simple expression, map an attribute set to a value list, here is a minimal case

here is the error

nix-repl> with import <nixpkgs> ; let v = builtins.attrValues { x="A";} ; in typeOf v
error: value is a function while a set was expected

       at «none»:0: (source not available)

i just wonder why there v is treat as function, it should be a list value while let already make it as value

remove typeOf , it runs ok

nix-repl> with import <nixpkgs> ; builtins.attrValues { x="A";}
[ "A" ]

is there something i misunderstood about the nix type system , how to make a lazy value eval in purpose

typeOf is in builtins, you need to access it with builtins.typeOf

The error message is because you used with import <nixpkgs>;, but it should be with import <nixpkgs> { };


thank you for helping me to solve the problem.

lack of supporting for nix lang’s package name importing in both vs code and vim, make is really hard scripting.

Anyway , it works now

Your original problem was because you wrote with import <nixpkgs>; and not with import <nixpkgs> {};. The with keyword needs to be followed by a set, but import <nixpkgs> is a function; apply that function with the argument {} and you’ll get a set that you can use with the with keyword.

But yea, the other problem is that typeOf is in builtins, not in import <nixpkgs> {}.