给出了Haskell函数:
head . filter fst
Run Code Online (Sandbox Code Playgroud)
现在的问题是如何手动"手动"找到类型.如果我让Haskell告诉我我得到的类型:
head . filter fst :: [(Bool, b)] -> (Bool, b)
Run Code Online (Sandbox Code Playgroud)
但是我想了解它是如何工作的,只使用已定义如下的已使用函数的签名:
head :: [a] -> a
(.) :: (b -> c) -> (a -> b) -> a -> c
filter :: (a -> Bool) -> [a] -> [a]
fst :: (a, b) -> a
Run Code Online (Sandbox Code Playgroud)
编辑:这么多很好的解释......选择最好的一个并不容易!
我有一个以十六进制数给出的带符号值,例如,0xffeb并希望将其转换-21为"正常"Javascript整数.
到目前为止我写了一些代码:
function toBinary(a) { //: String
var r = '';
var binCounter = 0;
while (a > 0) {
r = a%2 + r;
a = Math.floor(a/2);
}
return r;
}
function twoscompl(a) { //: int
var l = toBinaryFill(a).length;
var msb = a >>> (l-1);
if (msb == 0) {
return a;
}
a = a-1;
var str = toBinary(a);
var nstr = '';
for (var i = 0; i < str.length; i++) { …Run Code Online (Sandbox Code Playgroud) 我想使用CSS和HTML在屏幕上"绘制"树,而不是以任何方式或数据结构表示它...
我需要这个功能:
blubb :: ??? -> Int
blubb (n :: Int) = n
blubb (n :: Char) = 42
Run Code Online (Sandbox Code Playgroud)
这是它应该如何工作:函数获取Int并返回它.如果函数得到一个Char它返回一个常量值,其他情况是无关紧要的.
由于Haskell中的类型系统,它可能是不可能的,但我需要让它工作......
代码bellow适用于这样的输入:
*Main> eval 'y' (21 :: Int)
42
*Main> eval 'x' 'a'
42
*Main> eval (21 :: Int) (21 :: Int)
42
*Main> eval (42 :: Int) 'a'
42
Run Code Online (Sandbox Code Playgroud)
这背后的一般问题是我想添加两件事.添加到Ints并不难实现(它已经内置).但是我有一个给定的函数(这里geti)将Chars 解析为Ints和my add-function现在应该添加两个Ints以及Int组合Char(在每个排列中).的CharS被转换geti函数Int是如此,它们可以被添加.我考虑过另一种解决方案可能是:
eval (geti 'a') (42 :: Int)
Run Code Online (Sandbox Code Playgroud)
但这对我来说是不可能的.
所以一般来说我的问题是:有没有办法让这个更简单或实现它更优雅?
这是代码:
-- A static function only used to resolve some demo data
geti :: Char -> Int
geti c …Run Code Online (Sandbox Code Playgroud)