pure :: String -> ()
pure x = unsafePerformIO $ do
print x
return ()
pureCall :: String -> IO ()
pureCall x = do
pure x
putStrLn "inside child function"
Run Code Online (Sandbox Code Playgroud)
这会抛出编译错误,
The function ‘pure’ is applied to three arguments,
but its type ‘String -> ()’ has only one
Run Code Online (Sandbox Code Playgroud)
我在其他语言中使用分号作为代码行分隔符.但不确定,我怎么能在haskell中做到这一点,并将pureCall功能块作为两个单独的语句运行!!
我有一个表现不佳的 json 源。它经常提供意外的 JSON,其中包含格式错误的数组元素。我想解析这个 JSON 并忽略任何格式错误的数组元素。
这是我的尝试:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
import Data.Aeson
import Data.ByteString.Lazy.Char8 (ByteString, pack)
data Foo = Foo Integer [Maybe Bar] deriving (Show)
data Bar = Bar Integer Integer deriving (Show)
instance FromJSON Foo where
parseJSON (Object v) = Foo <$> (v .: "a") <*> (v .: "b")
parseJSON _ = mzero
instance FromJSON Bar where
parseJSON (Object v) = Bar <$> (v .: "c") <*> (v …Run Code Online (Sandbox Code Playgroud) 我正在尝试“解决”给定d: 的佩尔方程x^2 - d * y^2 = 1,或者至少我想得到x > 0可以解决方程的最小值。到现在为止还挺好。这是我的 Haskell 代码
minX :: Integer -> Integer
minX n | isSquare n = 1
| otherwise = minXRec [0,1,intSqrt n] [1,0,1] 0 1 (intSqrt n) n
minXRec :: [Integer] -> [Integer] -> Integer -> Integer -> Integer -> Integer -> Integer
minXRec (p0:p1:p2:x) (q0:q1:q2:y) m d a n
| p2*p2 - n*q2*q2 == 1 = p2
| minXRec [p1, p2, newA*p2+p1] [q1, q2, newA*q2+q1] …Run Code Online (Sandbox Code Playgroud) 假设有一个模型命名User,另一个命名与之Pet有OneToOne关系User,Pet模型有一个属性age,如何获得User拥有十大oldest狗的十个?
class User(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
class Pet(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
owner = models.OneToOneField(User, on_delete=models.CASCADE)
age = models.IntegerField(null=False)
Run Code Online (Sandbox Code Playgroud)
在User,有一个属性friends,有一个ManyToMany与关系User,如何让十friends的User Tom拥有十大oldest狗?
class User(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
friends = models.ManyToManyField(self, ...)
class Pet(models.Model):
name = models.CharField(max_length=50, null=False, blank=False)
owner = models.OneToOneField(User, on_delete=models.CASCADE)
age = models.IntegerField(null=False)
Run Code Online (Sandbox Code Playgroud) 我正在编写一个小的客户端/服务器应用程序,该应用程序ncurses在客户端上用作TUI工具包。客户端是多线程的,有一个线程(用于通过套接字与服务器通信)和一个用于处理UI的线程。我发现了一个错误,我想按照客户的指示逐步检查问题所在1。
简单地运行客户端gdb是行不通的,因为gdb使用与客户端相同的终端,因此输出全部混乱了,这使得读取它的输出非常困难,gdb并且似乎也会干扰curses(例如halfdelay,在步进时出现模式)根据指示,我无法将任何按键发送给客户端,因为每次程序在gdb经过很短的时间后就会降级到。)
有没有办法gdb在“专用终端”中运行?我应该使用其他方法来调试此应用程序吗?您对在这种特定情况下如何减少障碍数量有何建议?
1实际的错误是,经过一定数量的操作(以完全确定的方式)后,UI 不会更新,而是等待额外的按键(因为我已经halfdelay精确设置了模式以避免这种情况,所以不需要) 。我想知道客户在那一刻在做什么。
如何在python 2.7中更改sys.path中路径的优先级?我知道我可以使用PYTHONPATH环境变量,但这是我将得到的:
$ PYTHONPATH=/tmp python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for i in sys.path:
... print i
...
/usr/local/lib/python2.7/dist-packages/pycuda-2014.1-py2.7-linux-x86_64.egg
/usr/local/lib/python2.7/dist-packages/pytest-2.6.2-py2.7.egg
/usr/local/lib/python2.7/dist-packages/pytools-2014.3-py2.7.egg
/usr/local/lib/python2.7/dist-packages/py-1.4.24-py2.7.egg
/usr/lib/python2.7/dist-packages
/tmp
/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PILcompat
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/python2.7/dist-packages/ubuntu-sso-client
>>>
Run Code Online (Sandbox Code Playgroud)
/tmp在/usr/lib/python2.7/dist-packages和之间添加/usr/lib/python2.7.
我的目标是让python从/usr/local/lib/python2.7/dist-packages最初加载包.
这就是我想要的:
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", …Run Code Online (Sandbox Code Playgroud) 我有这个功能:
isUndefined :: () -> Bool
isUndefined x = case unsafePerformIO $ (try (return $! x) :: IO (Either SomeException ())) of
Left _ -> True
Right _ -> False
Run Code Online (Sandbox Code Playgroud)
然后:
isUndefined () = False
isUndefined undefined = True
Run Code Online (Sandbox Code Playgroud)
解决停止问题.当然,这也可以扩展到其他类型.
我的问题:这怎么可能?难道Control.Exception.try真的破事吗?
我想知道你会选择哪个选项?
putStrLn (show randomNum)
putStrLn $ show randomNum
(putStrLn . show) randomNum
Run Code Online (Sandbox Code Playgroud)
所有选项在语法上都是正确的.
括号确保show首先执行并且putStrLn只获得一个参数.
该$运营商负责展会功能和randomNum和执行show上randomNum,所以putStrLn只得到一个说法.
在.操作者取putStrLn功能,show功能和randomNum与第一执行show上randomNum,然后putStrLn对结果.
但是在这个例子中,更像是类似于orkell还是更有意义?
像2^(2%1)GHCi中没有类型检查的表达式,错误消息是神秘的.为什么这不起作用,我需要改变什么?
我不能转换为另一种类型,我想要这样的表达式27^(1%3).
我开始使用Coq,我想定义一些依赖类型的程序.考虑以下:
Inductive natlist : nat -> Type :=
| natnil : natlist 0
| natcons : forall k, nat -> natlist k -> natlist (S k).
Fixpoint natappend (n:nat) (l1: natlist n) (m:nat) (l2: natlist m) : natlist (n+m) :=
match l1 with
| natnil => l2
| natcons _ x rest => natcons (n+m) x (natappend rest l2)
end.
Run Code Online (Sandbox Code Playgroud)
那natlist k将是一个nat长度的列表k.串联定义的问题natappend是以下错误:
Error:
In environment
natappend : forall n : nat,
natlist … haskell ×6
python ×2
aeson ×1
c ×1
coq ×1
django ×1
gdb ×1
ghci ×1
list ×1
ncurses ×1
python-2.7 ×1
python-3.x ×1
types ×1
where-clause ×1