Get default case class arguments via Shapeless
Does shapeless provide a type class/macro that summons a HList
containing the default values for all parameters of a case class?
Let's say we have this case class:
case class User(name: String, age: Int = 18)
Then I would like to get such a HList
:
None :: Some(() => 18) :: HNil
scala shapeless
add a comment |
Does shapeless provide a type class/macro that summons a HList
containing the default values for all parameters of a case class?
Let's say we have this case class:
case class User(name: String, age: Int = 18)
Then I would like to get such a HList
:
None :: Some(() => 18) :: HNil
scala shapeless
add a comment |
Does shapeless provide a type class/macro that summons a HList
containing the default values for all parameters of a case class?
Let's say we have this case class:
case class User(name: String, age: Int = 18)
Then I would like to get such a HList
:
None :: Some(() => 18) :: HNil
scala shapeless
Does shapeless provide a type class/macro that summons a HList
containing the default values for all parameters of a case class?
Let's say we have this case class:
case class User(name: String, age: Int = 18)
Then I would like to get such a HList
:
None :: Some(() => 18) :: HNil
scala shapeless
scala shapeless
asked Nov 23 '18 at 21:31
AkiAki
1,098212
1,098212
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Default parameters is implemented over synthetic methods.
Try it trait. https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/default.scala
import shapeless.Default
case class User(name: String, age: Int = 18)
val d = Default[User]
println(d())
Out:
None :: Some(18) :: HNil
Default values get compiled to methods that produce the value. In my example scala would create a method that returns 18. I thought shapeless may provide references to those methods. I've tried to implement such a macro on my own but I did not find an api that allows the macro writer to somehow get those generated methods even though it should theoretically be possible...
– Aki
Nov 23 '18 at 23:43
@Aki use it github.com/milessabin/shapeless/blob/master/core/src/main/scala/…
– fshp
Nov 24 '18 at 0:35
That seems to be what i was looking for. May you write that as a separate answer so I could accept it?
– Aki
Nov 24 '18 at 10:34
@Aki I updated the answer
– fshp
Nov 24 '18 at 19:57
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53453148%2fget-default-case-class-arguments-via-shapeless%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Default parameters is implemented over synthetic methods.
Try it trait. https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/default.scala
import shapeless.Default
case class User(name: String, age: Int = 18)
val d = Default[User]
println(d())
Out:
None :: Some(18) :: HNil
Default values get compiled to methods that produce the value. In my example scala would create a method that returns 18. I thought shapeless may provide references to those methods. I've tried to implement such a macro on my own but I did not find an api that allows the macro writer to somehow get those generated methods even though it should theoretically be possible...
– Aki
Nov 23 '18 at 23:43
@Aki use it github.com/milessabin/shapeless/blob/master/core/src/main/scala/…
– fshp
Nov 24 '18 at 0:35
That seems to be what i was looking for. May you write that as a separate answer so I could accept it?
– Aki
Nov 24 '18 at 10:34
@Aki I updated the answer
– fshp
Nov 24 '18 at 19:57
add a comment |
Default parameters is implemented over synthetic methods.
Try it trait. https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/default.scala
import shapeless.Default
case class User(name: String, age: Int = 18)
val d = Default[User]
println(d())
Out:
None :: Some(18) :: HNil
Default values get compiled to methods that produce the value. In my example scala would create a method that returns 18. I thought shapeless may provide references to those methods. I've tried to implement such a macro on my own but I did not find an api that allows the macro writer to somehow get those generated methods even though it should theoretically be possible...
– Aki
Nov 23 '18 at 23:43
@Aki use it github.com/milessabin/shapeless/blob/master/core/src/main/scala/…
– fshp
Nov 24 '18 at 0:35
That seems to be what i was looking for. May you write that as a separate answer so I could accept it?
– Aki
Nov 24 '18 at 10:34
@Aki I updated the answer
– fshp
Nov 24 '18 at 19:57
add a comment |
Default parameters is implemented over synthetic methods.
Try it trait. https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/default.scala
import shapeless.Default
case class User(name: String, age: Int = 18)
val d = Default[User]
println(d())
Out:
None :: Some(18) :: HNil
Default parameters is implemented over synthetic methods.
Try it trait. https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/default.scala
import shapeless.Default
case class User(name: String, age: Int = 18)
val d = Default[User]
println(d())
Out:
None :: Some(18) :: HNil
edited Nov 24 '18 at 0:53
answered Nov 23 '18 at 23:28
fshpfshp
1765
1765
Default values get compiled to methods that produce the value. In my example scala would create a method that returns 18. I thought shapeless may provide references to those methods. I've tried to implement such a macro on my own but I did not find an api that allows the macro writer to somehow get those generated methods even though it should theoretically be possible...
– Aki
Nov 23 '18 at 23:43
@Aki use it github.com/milessabin/shapeless/blob/master/core/src/main/scala/…
– fshp
Nov 24 '18 at 0:35
That seems to be what i was looking for. May you write that as a separate answer so I could accept it?
– Aki
Nov 24 '18 at 10:34
@Aki I updated the answer
– fshp
Nov 24 '18 at 19:57
add a comment |
Default values get compiled to methods that produce the value. In my example scala would create a method that returns 18. I thought shapeless may provide references to those methods. I've tried to implement such a macro on my own but I did not find an api that allows the macro writer to somehow get those generated methods even though it should theoretically be possible...
– Aki
Nov 23 '18 at 23:43
@Aki use it github.com/milessabin/shapeless/blob/master/core/src/main/scala/…
– fshp
Nov 24 '18 at 0:35
That seems to be what i was looking for. May you write that as a separate answer so I could accept it?
– Aki
Nov 24 '18 at 10:34
@Aki I updated the answer
– fshp
Nov 24 '18 at 19:57
Default values get compiled to methods that produce the value. In my example scala would create a method that returns 18. I thought shapeless may provide references to those methods. I've tried to implement such a macro on my own but I did not find an api that allows the macro writer to somehow get those generated methods even though it should theoretically be possible...
– Aki
Nov 23 '18 at 23:43
Default values get compiled to methods that produce the value. In my example scala would create a method that returns 18. I thought shapeless may provide references to those methods. I've tried to implement such a macro on my own but I did not find an api that allows the macro writer to somehow get those generated methods even though it should theoretically be possible...
– Aki
Nov 23 '18 at 23:43
@Aki use it github.com/milessabin/shapeless/blob/master/core/src/main/scala/…
– fshp
Nov 24 '18 at 0:35
@Aki use it github.com/milessabin/shapeless/blob/master/core/src/main/scala/…
– fshp
Nov 24 '18 at 0:35
That seems to be what i was looking for. May you write that as a separate answer so I could accept it?
– Aki
Nov 24 '18 at 10:34
That seems to be what i was looking for. May you write that as a separate answer so I could accept it?
– Aki
Nov 24 '18 at 10:34
@Aki I updated the answer
– fshp
Nov 24 '18 at 19:57
@Aki I updated the answer
– fshp
Nov 24 '18 at 19:57
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53453148%2fget-default-case-class-arguments-via-shapeless%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown