Type mismatch when passing tupleFunctions with generic parameter typesType mismatch compilation error with tupleBest approach for designing F# libraries for use from both F# and C#F# Pipelines access data from pipeline stages aboveCan a Type Provider be passed into a function as a parameterIdiomatic way in F# to establish adherence to an interface on type rather than instance levelIn F# what is the difference between float[,] and float[][] and how do I initialise float[][]?Type mismatch error in result typeElegant pattern matching on nested tuples of arbitrary lengthF# tuple, System.Tuple and collection - Type constraint mismatch?
Pre-mixing cryogenic fuels and using only one fuel tank
Strong empirical falsification of quantum mechanics based on vacuum energy density?
Does Doodling or Improvising on the Piano Have Any Benefits?
Non-trope happy ending?
Biological Blimps: Propulsion
Does the reader need to like the PoV character?
What is the highest possible scrabble score for placing a single tile
What is going on with gets(stdin) on the site coderbyte?
Stack Interview Code methods made from class Node and Smart Pointers
How many arrows is an archer expected to fire by the end of the Tyranny of Dragons pair of adventures?
Why does this expression simplify as such?
What is the English pronunciation of "pain au chocolat"?
I found an audio circuit and I built it just fine, but I find it a bit too quiet. How do I amplify the output so that it is a bit louder?
Is it necessary to use pronouns with the verb "essere"?
What (the heck) is a Super Worm Equinox Moon?
awk assign to multiple variables at once
Has the laser at Magurele, Romania reached a tenth of the Sun's power?
Creating two special characters
Make a Bowl of Alphabet Soup
The Digit Triangles
Does the Linux kernel need a file system to run?
Is there any evidence that Cleopatra and Caesarion considered fleeing to India to escape the Romans?
Can I cause damage to electrical appliances by unplugging them when they are turned on?
Can I say "fingers" when referring to toes?
Type mismatch when passing tuple
Functions with generic parameter typesType mismatch compilation error with tupleBest approach for designing F# libraries for use from both F# and C#F# Pipelines access data from pipeline stages aboveCan a Type Provider be passed into a function as a parameterIdiomatic way in F# to establish adherence to an interface on type rather than instance levelIn F# what is the difference between float[,] and float[][] and how do I initialise float[][]?Type mismatch error in result typeElegant pattern matching on nested tuples of arbitrary lengthF# tuple, System.Tuple and collection - Type constraint mismatch?
The following function accepts a list, a tuple (a, b) where 'a' is a tuple of floats and a query to test against.
checkDist is a function that takes two tuples of floats and returns the distance between all points.
Now, my problem is that I run into a type missmatch error and cannot figure out why. It seems to type infer 'a' as only a single float, rather than float * float.
let intoTp lst (a, b) qry =
let rec intoTpLoop lst prevMax =
match lst with
| [] -> []
| (feat, value) :: t ->
let curr = checkDist feat qry // current max
let prev = checkDist prevMax qry // prev max
// Check to replace top
if prev < curr then
let nextMax = (feat, value)
prevMax :: intoTpLoop t nextMax
else
(feat, value) :: intoTpLoop t prevMax
intoTpLoop lst (a, b)
Thanks,
f#
add a comment |
The following function accepts a list, a tuple (a, b) where 'a' is a tuple of floats and a query to test against.
checkDist is a function that takes two tuples of floats and returns the distance between all points.
Now, my problem is that I run into a type missmatch error and cannot figure out why. It seems to type infer 'a' as only a single float, rather than float * float.
let intoTp lst (a, b) qry =
let rec intoTpLoop lst prevMax =
match lst with
| [] -> []
| (feat, value) :: t ->
let curr = checkDist feat qry // current max
let prev = checkDist prevMax qry // prev max
// Check to replace top
if prev < curr then
let nextMax = (feat, value)
prevMax :: intoTpLoop t nextMax
else
(feat, value) :: intoTpLoop t prevMax
intoTpLoop lst (a, b)
Thanks,
f#
add a comment |
The following function accepts a list, a tuple (a, b) where 'a' is a tuple of floats and a query to test against.
checkDist is a function that takes two tuples of floats and returns the distance between all points.
Now, my problem is that I run into a type missmatch error and cannot figure out why. It seems to type infer 'a' as only a single float, rather than float * float.
let intoTp lst (a, b) qry =
let rec intoTpLoop lst prevMax =
match lst with
| [] -> []
| (feat, value) :: t ->
let curr = checkDist feat qry // current max
let prev = checkDist prevMax qry // prev max
// Check to replace top
if prev < curr then
let nextMax = (feat, value)
prevMax :: intoTpLoop t nextMax
else
(feat, value) :: intoTpLoop t prevMax
intoTpLoop lst (a, b)
Thanks,
f#
The following function accepts a list, a tuple (a, b) where 'a' is a tuple of floats and a query to test against.
checkDist is a function that takes two tuples of floats and returns the distance between all points.
Now, my problem is that I run into a type missmatch error and cannot figure out why. It seems to type infer 'a' as only a single float, rather than float * float.
let intoTp lst (a, b) qry =
let rec intoTpLoop lst prevMax =
match lst with
| [] -> []
| (feat, value) :: t ->
let curr = checkDist feat qry // current max
let prev = checkDist prevMax qry // prev max
// Check to replace top
if prev < curr then
let nextMax = (feat, value)
prevMax :: intoTpLoop t nextMax
else
(feat, value) :: intoTpLoop t prevMax
intoTpLoop lst (a, b)
Thanks,
f#
f#
asked Mar 7 at 23:59
RazollRazoll
36115
36115
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
So you are calling checkDist
twice, the first time you pass feat
which is a single value, the second time you pass prevMax
which is a tuple. There is your contradiction.
When in doubt about what is happening with the type inference it helps to add type annotations to clarify what is supposed to be what (to the inference engine, to yourself and to us).
Both feat and prevMax, when passed to checkDist, are of val float * float. feat is not a single value, it is a tuple of floats.
– Razoll
Mar 8 at 0:16
iffeat
is a tuple thenprevMax :: intoTpLoop t nextMax
is missing thevalue
part
– AMieres
Mar 8 at 0:18
1
I suppose that the problem is here:| (feat, value) :: t ->
It should be| feat :: t ->
– AMieres
Mar 8 at 0:24
Yes you are right. The problem was that feat and prevMax was passed as the same type to checkDist, but then I used them differently when building the resulting list.
– Razoll
Mar 8 at 0:39
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%2f55054742%2ftype-mismatch-when-passing-tuple%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
So you are calling checkDist
twice, the first time you pass feat
which is a single value, the second time you pass prevMax
which is a tuple. There is your contradiction.
When in doubt about what is happening with the type inference it helps to add type annotations to clarify what is supposed to be what (to the inference engine, to yourself and to us).
Both feat and prevMax, when passed to checkDist, are of val float * float. feat is not a single value, it is a tuple of floats.
– Razoll
Mar 8 at 0:16
iffeat
is a tuple thenprevMax :: intoTpLoop t nextMax
is missing thevalue
part
– AMieres
Mar 8 at 0:18
1
I suppose that the problem is here:| (feat, value) :: t ->
It should be| feat :: t ->
– AMieres
Mar 8 at 0:24
Yes you are right. The problem was that feat and prevMax was passed as the same type to checkDist, but then I used them differently when building the resulting list.
– Razoll
Mar 8 at 0:39
add a comment |
So you are calling checkDist
twice, the first time you pass feat
which is a single value, the second time you pass prevMax
which is a tuple. There is your contradiction.
When in doubt about what is happening with the type inference it helps to add type annotations to clarify what is supposed to be what (to the inference engine, to yourself and to us).
Both feat and prevMax, when passed to checkDist, are of val float * float. feat is not a single value, it is a tuple of floats.
– Razoll
Mar 8 at 0:16
iffeat
is a tuple thenprevMax :: intoTpLoop t nextMax
is missing thevalue
part
– AMieres
Mar 8 at 0:18
1
I suppose that the problem is here:| (feat, value) :: t ->
It should be| feat :: t ->
– AMieres
Mar 8 at 0:24
Yes you are right. The problem was that feat and prevMax was passed as the same type to checkDist, but then I used them differently when building the resulting list.
– Razoll
Mar 8 at 0:39
add a comment |
So you are calling checkDist
twice, the first time you pass feat
which is a single value, the second time you pass prevMax
which is a tuple. There is your contradiction.
When in doubt about what is happening with the type inference it helps to add type annotations to clarify what is supposed to be what (to the inference engine, to yourself and to us).
So you are calling checkDist
twice, the first time you pass feat
which is a single value, the second time you pass prevMax
which is a tuple. There is your contradiction.
When in doubt about what is happening with the type inference it helps to add type annotations to clarify what is supposed to be what (to the inference engine, to yourself and to us).
edited Mar 8 at 0:22
answered Mar 8 at 0:09
AMieresAMieres
3,6401611
3,6401611
Both feat and prevMax, when passed to checkDist, are of val float * float. feat is not a single value, it is a tuple of floats.
– Razoll
Mar 8 at 0:16
iffeat
is a tuple thenprevMax :: intoTpLoop t nextMax
is missing thevalue
part
– AMieres
Mar 8 at 0:18
1
I suppose that the problem is here:| (feat, value) :: t ->
It should be| feat :: t ->
– AMieres
Mar 8 at 0:24
Yes you are right. The problem was that feat and prevMax was passed as the same type to checkDist, but then I used them differently when building the resulting list.
– Razoll
Mar 8 at 0:39
add a comment |
Both feat and prevMax, when passed to checkDist, are of val float * float. feat is not a single value, it is a tuple of floats.
– Razoll
Mar 8 at 0:16
iffeat
is a tuple thenprevMax :: intoTpLoop t nextMax
is missing thevalue
part
– AMieres
Mar 8 at 0:18
1
I suppose that the problem is here:| (feat, value) :: t ->
It should be| feat :: t ->
– AMieres
Mar 8 at 0:24
Yes you are right. The problem was that feat and prevMax was passed as the same type to checkDist, but then I used them differently when building the resulting list.
– Razoll
Mar 8 at 0:39
Both feat and prevMax, when passed to checkDist, are of val float * float. feat is not a single value, it is a tuple of floats.
– Razoll
Mar 8 at 0:16
Both feat and prevMax, when passed to checkDist, are of val float * float. feat is not a single value, it is a tuple of floats.
– Razoll
Mar 8 at 0:16
if
feat
is a tuple then prevMax :: intoTpLoop t nextMax
is missing the value
part– AMieres
Mar 8 at 0:18
if
feat
is a tuple then prevMax :: intoTpLoop t nextMax
is missing the value
part– AMieres
Mar 8 at 0:18
1
1
I suppose that the problem is here:
| (feat, value) :: t ->
It should be | feat :: t ->
– AMieres
Mar 8 at 0:24
I suppose that the problem is here:
| (feat, value) :: t ->
It should be | feat :: t ->
– AMieres
Mar 8 at 0:24
Yes you are right. The problem was that feat and prevMax was passed as the same type to checkDist, but then I used them differently when building the resulting list.
– Razoll
Mar 8 at 0:39
Yes you are right. The problem was that feat and prevMax was passed as the same type to checkDist, but then I used them differently when building the resulting list.
– Razoll
Mar 8 at 0:39
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%2f55054742%2ftype-mismatch-when-passing-tuple%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