Types 有没有一种方法可以从给定的域到给定的编码域动态构建函数?

Types 有没有一种方法可以从给定的域到给定的编码域动态构建函数?,types,elm,Types,Elm,这样的功能可以实现吗? 该函数将具有以下类型: f:(a->b)->(c->d)->可能(a->d) 这样,如果调用时b和c是相同的类型,则返回Just(a->d),否则返回Nothing 如果没有,有没有办法创建我们自己的类型来表示函数,这样我们就可以实现这个想法?没有,不管是好是坏,Elm代码都不能在运行时检查类型,因此无法知道第一个参数是返回了b还是c。您可以强制它们是相同的类型(通过使用相同的变量名)。我很好奇,如果可能的话,您打算如何使用这样的函数?我正在考虑构建一组函数,作为数据查询

这样的功能可以实现吗?
该函数将具有以下类型:

f:(a->b)->(c->d)->可能(a->d)

这样,如果调用时
b
c
是相同的类型,则返回
Just(a->d)
,否则返回
Nothing


如果没有,有没有办法创建我们自己的类型来表示函数,这样我们就可以实现这个想法?

没有,不管是好是坏,Elm代码都不能在运行时检查类型,因此无法知道第一个参数是返回了
b
还是
c
。您可以强制它们是相同的类型(通过使用相同的变量名)。我很好奇,如果可能的话,您打算如何使用这样的函数?我正在考虑构建一组函数,作为数据查询DSL。将有不同的方法来组合这些函数,但在某些情况下,如果对它们进行重新排列,性能会有所提高。我不希望我能做到这一点,但我想看看别人说什么,这是,据我所知(不张贴答案,因为我不认为我的理解是足够好,以完全确定在我的答案)不(安全)可能在Elm或Haskell,也没有任何其他(ML类型或其他)语言,因为它打破了“参数化”原则:你不能检查“b”或“c”是什么类型。在Haskell中,有一个称为“Typeable”typeclass的转义图案填充,当通过它约束函数时,它允许您检查具体类型。但是Elm没有这样的度量标准。@qwy这是有道理的。如果你把这个作为回答,我会接受的。如果我们将来发现矛盾的信息,我们会处理它。